二叉树的遍历算法图解(二叉树的遍历)
大家好,我是小典,我来为大家解答以上问题。二叉树的遍历算法图解,二叉树的遍历很多人还不知道,现在让我们一起来看看吧!
1、遍历方案
2、 从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:
3、 (1)访问结点本身(N),
4、 (2)遍历该结点的左子树(L),
5、 (3)遍历该结点的右子树(R)。
6、三种遍历的命名
7、 根据访问结点操作发生位置命名:
8、 ① NLR:前序遍历(PreorderTraversal亦称(先序遍历))
9、 ——访问结点的操作发生在遍历其左右子树之前。
10、 ② LNR:中序遍历(InorderTraversal)
11、 ——访问结点的操作发生在遍历其左右子树之中(间)。
12、 ③ LRN:后序遍历(PostorderTraversal)
13、 ——访问结点的操作发生在遍历其左右子树之后。
14、 注意:
15、 由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。
16、 遍历算法
17、 1.中序遍历的递归算法定义:
18、 若二叉树非空,则依次执行如下操作:
19、 (1)遍历结点的左子树;
20、 (2)访问当前结点;
21、 (3)遍历结点的右子树。
22、 2.先序遍历的递归算法定义:
23、 若二叉树非空,则依次执行如下操作:
24、 (1) 访问当前结点;
25、 (2) 遍历结点的左子树;
26、 (3) 遍历结点的右子树。
27、 3.后序遍历得递归算法定义:
28、 若二叉树非空,则依次执行如下操作:
29、 (1)遍历结点的左子树;
30、 (2)遍历结点的右子树;
31、 (3)访问当前结点。
32、 4.中序遍历的算法实现
33、 用二叉链表做为存储结构,中序遍历算法可描述为:
34、 void InOrder(BinTree T)
35、 { //算法里①~⑥是为了说明执行过程加入的标号
36、 ① if(T) { // 如果二叉树非空
37、 ② InOrder(T->lchild);
38、 ③ printf("%c",T->data); // 访问结点
39、 ④ InOrder(T->rchild);
40、 ⑤ }
41、 ⑥ } // InOrder
42、还有什么不明白的请继续追加~
本文到此讲解完毕了,希望对大家有帮助。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时候联系我们修改或删除,多谢。