当前位置:   article > 正文

找二叉树中给定元素的的左孩子结点_详解二叉树前序遍历,中序遍历,后序遍历...

二叉树顺序表求第index结点的左孩子
1 题目

请详细讲解前序遍历,中序遍历和后序遍历。

2 解答 假设给定如下的二叉树,我们通过分析来详细讲解这三种遍历方式。

f009ba39ce9d918965a7232cc1f9be42.png

1:前序遍历

对于当前节点,先输出该节点,然后输出它的左孩子,最后输出它的右孩子。 即根结点 ---> 左子树 ---> 右子树。以上图为例,递归的过程如下:
  1. 首先输出根节点1。
  2. 输出左儿子2。
  3. 因为2没有左儿子,所以输出下一个,即输出右儿子5。
  4. 因为5没有左儿子,所以输出下一个,即输出右儿子8。
  5. 至此根的左儿子都输出完毕,开始输出它即1的右儿子,右儿子第一个为3。
  6. 输出3的左儿子6。
  7. 输出3的右儿子7。
  8. 至此全部输出完毕,结束。
所以输出的结果前序遍历结果是:1  2  5  8  3  6  7

2:中序遍历

首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回。 即左子树---> 根结点 ---> 右子树。以上图为例,对左右子树分别进行左儿子-->自己-->右儿子输出,递归的过程如下:
  1. 首先输出左儿子,因为2没有左儿子,所以输出自己2。
  2. 准备输出2的右儿子5,若5有左儿子,则输出该元素,现在因为5没有左儿子,所以输出5。
  3. 输出5的右儿子8。
  4. 至此左子树输出完毕,输出根节点1。
  5. 开始输出右子树,因为3有左子树,所以首先输出6,然后输出3。
  6. 输出3的右子树7。
  7. 至此全部输出结束。
所以输出的结果中序遍历结果是:2  5  8  1  6  3  7

3:后序遍历

对于当前结点,先输出它的左孩子,然后输出它的右孩子,最后输出该结点。即左子树 ---> 右子树 ---> 根结点 递归的过程如下:
  1. 首先输出左子树,因为2有右孩子5,而5又有右儿子,所以先输出8。
  2. 输出8之后,输出自己5。
  3. 然后输出节点2。
  4. 至此左子树遍历完毕,开始遍历右子树,因为3有左子树,所以输出6,输出右子树7,最后输出自己3。
  5. 最后输出根节点1。
  6. 至此全部输出完毕。
所以输出的结果后序遍历结果是:8  5  2  6  7  3  1

4:讲完了左右子树的概念之后,我们根据前序遍历中序遍历推导树的结构。

前序遍历:1  2  5  8  3  6  7

中序遍历:2  5  8  1  6  3  7

  1. 首先知道前序遍历的第一个节点是根节点1,可以通过该节点1在中序遍历中把子树分成左右子树,即左子树中有2  5  8,右子树中右6  3  7
  2. 根据前序遍历的特点,我们可以得到2是左子树的根节点。
  3. 那么5,8的具体的位置,我们无法从前序遍历中得到结果,那么我们是否可以从中序遍历中获取结果呢?根据中序遍历的特点(左儿子-->自己-->右儿子)我们可以得到5是2的右儿子。
  4. 再来看8,因为5是2的右儿子,所以8不可能是2的儿子,8只能是5的儿子,那么8是5的左儿子还是右儿子呢?假设8是5的左儿子,那么不满足中序遍历的2  5  8,而应该是2  8  5,所以8是5的右儿子。
  5. 至此左子树的排序完成。
  6. 再来看右边的6  3   7。
  7. 根据前序遍历,去掉2  5  8,可得3  6  7,那么3是右子树的根节点。
  8. 再根据中序遍历的特点,因为右子树是6  3   7,所以6是3的左儿子,7是3的右儿子。
  9. 至此右子树的分析也结束了。
至此我们得到了整棵数的结构。

5:我们根据中序遍历后序遍历推导树的结构。

中序遍历:2  5  8  1  6  3  7

后序遍历:8  5  2  6  7  3  1

  1. 根据后序遍历的特点,即根节点是后序遍历的最后一个节点1,可以通过1,在中序遍历中把树分成左子树和右子树,即1的左半部分为左子树2  5  8,右子树6  3  7。

  2. 根据后序遍历的特点是左子树-->右子树-->自己,所以8  5  2中2是左子树的根节点。

  3. 根据中序遍历,5  8在2的右边,所以只能是2的右子树的元素,又2只会有一个右儿子,所以5是2的右儿子,最后剩下8是5的什么儿子呢?根据中序遍历的特点,若8是5左儿子,那么中序遍历应该是2  8  5,所以8是5的右儿子。

  4. 至此1的左子树排序完成。

  5. 再看6  3  7,根据后序遍历,可得3是右子树的根节点,再看中序遍历,6  3  7,所以6 7分别是3的左儿子和右儿子。

  6. 至此右子树排序完成。

至此我们得到了整棵数的结构。

讲了这么多,希望你们能够理解,好的话请关注一下每日一算法公众号吧~~~

3 代码

1c084c51b4bc27625ddf19693d1fb654.png

f7420577c2fa093362f3c6eb0ba77c98.png

扫一扫 关注我的公众号

你的关注是我最大的动力

如果你想要跟大家分享你的文章,欢迎留言投稿~

如果你喜欢,请留下你的赞哦

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

闽ICP备14008679号