二叉树的遍历算法图解(二叉树的遍历)

摘要 大家好,我是小典,我来为大家解答以上问题。二叉树的遍历算法图解,二叉树的遍历很多人还不知道,现在让我们一起来看看吧!1、遍历方案2、...

大家好,我是小典,我来为大家解答以上问题。二叉树的遍历算法图解,二叉树的遍历很多人还不知道,现在让我们一起来看看吧!

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、还有什么不明白的请继续追加~

本文到此讲解完毕了,希望对大家有帮助。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时候联系我们修改或删除,多谢。