转自:   点击打开链接
1 void inorder(tree_pointer ptr)
2 {
3     if (ptr) {
4         inorder(ptr->left_child);
5         printf("\t%d", ptr->data);
6         inorder(ptr->right_child);
7     }
8 }
以二叉树的中序遍历为例,理解其递归过程

函数本身非常简洁,下面我们以图示的二叉树解释函数的遍历过程:

以二叉树的中序遍历为例,理解其递归过程

如上图所示,这颗二叉树有九个节点:ABCDEFGHI,红线连接的“节点”表示叶子节点的“左右儿子”(实际上叶子节点没有左右儿子,这里便于描述,假设存在这些NULL节点)

根据中序遍历的定义,我们可以得到这颗二叉树的中序遍历结果为:HFIDGBEAC.

把这颗二叉树的root节点指针作为参数传递给inorder函数,则函数的执行过程如下:

调用函数: inorder(root);

(下面步骤号为调用inorder函数的顺序次数)

1. 第一次调用inorder,ptr指向A,函数进入if结构,执行第四行代码,第二次调用inorder,参数为A的左儿子B;

2. ptr->B,进入if,执行line4,第三次调用inorder: inorder(B->left_child);

3. ptr->D,进入if,line4,第四次调用:inorder(D->l_c);

4. ptr->F, if, line4: inorder(F->l_c);

5. ptr->H, if, line4: inorder(H->lc);

6. ptr->NULL, 没有进入if, return;

5. 执行line5,printf(H),执行line6: inorder(H->rc);

7. ptr->NULL, 没有进入if, return回 5 ,5已经执行完毕,return 回4;

4. line5,printf(F),line6: inorder(F->rc);

8. ptr->I, if, line4: inorder(I->lc);

9. ptr->NULL, return-8;

8. line5, printf(I), line6: inorder(I->rc);

10. ptr->NULL, return-8, 8 完成,return-4, 4完成, return-3;

3. line5:printf(D), line6: inorder(D->rc);

11. ptr->G, line4: inorder(G->lc);

12. ptr->NULL, return-11;

11. line5: printf(G), line6: inorder(G->rc);

13. ptr->NULL, return-11, 11完, return-3, 3完,return-2;

2. line5:printf(B), line6:inorder(B->rc);

14. ptr->E, line4: inorder(E->lc);

15. ptr->NULL, return-14;

14. line5: printf(E), line6: inorder(E->rc);

16. ptr->NULL, return-14, 14 finished, return-2, 2 finished, return 1;

1. line5: printf(A), line6: inorder(A->rc);

17. ptr->C, line4: inorder(C->lc) ;

18. ptr->NULL, return-17;

17. line5: printf(C); line6: inorder(C->rc);

19. ptr->NULL, return-17, 17 finished, return 1, 1 finished ,return 回调用函数

完成。

  上面的步骤手动描述了递归中序遍历的执行过程,其中暗含了递归调用的入栈出栈过程。

因此,二叉树的前序,中序,后序,也可以使用栈做循环来遍历。

相关文章:

  • 2022-12-23
  • 2021-11-07
  • 2022-12-23
  • 2021-04-24
  • 2021-11-23
  • 2021-11-30
  • 2021-08-23
  • 2021-09-07
猜你喜欢
  • 2021-11-21
  • 2022-12-23
  • 2022-02-08
  • 2022-12-23
  • 2021-12-10
  • 2022-01-24
  • 2022-02-13
相关资源
相似解决方案