当前位置:   article > 正文

二叉树的前中后序遍历_前序遍历 中序遍历 后序遍历

前序遍历 中序遍历 后序遍历

首先,先了解一下什么是二叉树的遍历。

2f2444ce58b14d58b97901fddc4ac33b.png

接下来,我们就来具体分析前中后序遍历,以及其代码实现。

要注意的是,二叉树有许多地方都要用到递归的思想。要把二叉树分为根、左子树、右子树,再把左子树、右子树看作一个二叉树,分为根、左子树、右子树,把一个大的二叉树分为N个小二叉树,直至不可再分。充分的利用了递归的思想,将一个大问题,变为N个小的子问题,将其分至不可再分割。

628e279541b54e7dbf97638227a0ee84.png

用代码实现非常简单,但如果不了解递归,就会十分难以理解。

我们以前序遍历的代码举例。要实现它,要用递归,所以,首先我们要找到递归的终止条件。当递归至叶子节点时,其左右子树都为空,把其左右子树当作一个二叉树,其为根节点,所以,递归的终止条件是其根节点为空,接着就开始往回返时,就会不断访问其父节点,不断打印。

  1. //前序遍历
  2. void PrevOrder(BTNode* root)
  3. {
  4. if (root == NULL)
  5. {
  6. printf("NULL ");
  7. return;
  8. }
  9. printf("%c ", root->data);
  10. PrevOrder(root->left);
  11. PrevOrder(root->right);
  12. }

172a6f6cd0d14d9dab2a2b544ddfb01b.png

6dbc86732c5b48df9f13f8f339967067.png

这个视频转动图太不容易了,没会员只能搞了模糊的,所以这个将就看一下(因为没会员,所以只能撮合用了),代码就是前序遍历的代码,重要的是理解递归的过程。

e0d255545bb64c419c41c21a87380ee4.gif

中序遍历、后序遍历与前序类似

  1. //中序遍历
  2. void InOrder(BTNode* root)
  3. {
  4. if (root == NULL)
  5. {
  6. printf("NULL ");
  7. return;
  8. }
  9. InOrder(root->left);
  10. printf("%c ", root->data);
  11. InOrder(root->right);
  12. }
  13. //后序遍历
  14. void NextOrder(BTNode* root)
  15. {
  16. if (root == NULL)
  17. {
  18. printf("NULL ");
  19. return;
  20. }
  21. NextOrder(root->left);
  22. NextOrder(root->right);
  23. printf("%c ", root->data);
  24. }

eb6c6d515ff348988e40e528085855b0.png

总结

使用递归时,一定要多思考,多画图,理清思路,因为一旦牵扯到递归,解释起来就不会那么容易,我尽力了,大家加油。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/778753
推荐阅读
相关标签
  

闽ICP备14008679号