【数据结构和算法】如何根据树的遍历序列求解树结构和题目分析

根据前序遍历和中序遍历写出后续遍历

例子:
已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF

解题思路:
回看一下式1和式2。可以看出前序遍历的第一个元素就是这个子树的根节点,然后就可以结合中序遍历划分左右子树,进而对左右子树的前序遍历和中序遍历递归求解子树树根,直至子树为空。

例题解释:
有前序序列可以知道根节点为A,由中序序列可以知道A的左子树中序遍历为DBGE,由前序序列可以知道A的左子树前序序列为BDEG。接下来可以得到A右子树前序序列为CFH,中序遍历为CHF。接下来递归求解即可。
在这里插入图片描述
已知一棵二叉树的前根序序列和中根序序列,构造该二叉树的过程如下:

  1. 根据前根序序列的第一个元素建立根结点;
  2. 在中根序序列中找到该元素,确定根结点的左右子树的中根序序列;
  3. 在前根序序列中确定左右子树的前根序序列;
  4. 由左子树的前根序序列和中根序序列建立左子树;
  5. 由右子树的前根序序列和中根序序列建立右子树。

根据后序遍历和中序遍历求前序遍历

例题:
已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历是()

解题思路:
回看一下式2和式3。后序遍历的根节点在最后一个元素,因此可以根据根节点结合中序遍历,将找出根节点的左子树、右子树。进而递归需找子树根节点,直至子树为空。

例题解释:
根据后序遍历可知根节点为c,结合中序遍历c左子树中序遍历为deba,前序遍历为dabe,右子树为空。接下来对左子树递归求解即可。
在这里插入图片描述
已知一棵二叉树的后根序序列和中根序序列,构造该二叉树的过程如下:

  1. 根据后根序序列的最后一个元素建立根结点;
  2. 在中根序序列中找到该元素,确定根结点的左右子树的中根序序列;
  3. 在后根序序列中确定左右子树的后根序序列;
  4. 由左子树的后根序序列和中根序序列建立左子树;
  5. 由右子树的后根序序列和中根序序列建立右子树。

根据前序遍历和后序遍历求中序遍历

这种方式是无法确切还原出树的结构的。
例子:
二叉树前序遍历为ABDEGCFH,后序序列为DGEBHFCA

分析:
可以确定第一个根节点是A,A第一个子树根节点是B,根节点为B的子树后序遍历为DGEB,前序遍历为BDEG,A第二个子树根节点为C,他的后序遍历为HFC,前序遍历为CFH,然后一次递归。简单起见,我们只看A第二个子树,即右子树C。C的第一个根节点F,子树F的后序遍历HF,前序遍历FH,C没有第二个子树,这时不管F为左子树还是右子树都是满足要求的。同理F的子树H。
在这里插入图片描述

总结,在由两种遍历方式求树结构的时候,关键是先找到根节点,然后对左右子树递归求解。

**加粗样式**
因此这题,由于后序遍历中c的左边就是靠近a了,所以a是没有其另外的一个孩子节点。

参考链接:https://blog.csdn.net/weixin_41856078/article/details/79725852

发布了34 篇原创文章 · 获赞 1 · 访问量 2282

猜你喜欢

转载自blog.csdn.net/weixin_44751294/article/details/104394956