目录
一、概念
二叉树的遍历(Traversing binary tree)是指从根节点出发,按照某种次序访问二叉树中所有的节点,使得每个节点被依次访问且仅被访问一次。
二、样例的图
三、3种遍历方式的遍历及C++遍历实现
1、前序遍历(preorder traversal):先访问根节点-->再访问左子树-->再访问右子树
template <typename E>
void preorder(BinNode<E>* root){
if(root == NULL) return;
visit(root);
preorder(root->left());
preorder(root->right());
}
2、中序遍历(inorder traversal):先访问左子树-->再访问根节点-->再访问右子树
template <typename E>
void inorder(BinNode<E>* root){
if(root == NULL) return;
inorder(root->left());
visit(root);
inorder(root->right());
}
3、后序遍历(postorder traversal):先访问左子树-->再访问右子树-->再访问根节点
template <typename E>
void postorder(BinNode<E>* root){
if(root == NULL) return;
postorder(root->left());
postorder(root->right());
visit(root);
}
四、对于上面那棵树,给出的三种遍历结果
1、先序遍历:A->B->D->F->G->H->I->E->C;
2、中序遍历:F->D->H->G->I->B->E->A->C;
3、后序遍历:F->H->I->G->D->E->B->C->A。
五、二叉树遍历的应用
1、求二叉树中节点数目
思路:一个非空子树的节点数等于它的根加上其左右子树的节点数目之和。
template <typename E>
int count(BinNode<E>* root){
if(root == NULL) return 0;
return 1 + count(root->left())
+ count(root->right());
}