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

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

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


例子:

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


解题思路:

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


例题解释:

有前序序列可以知道根节点为A,由中序序列可以知道A的左子树中序遍历为DBGE,由前序序列可以知道A的左子树前序序列为BDEG。接下来可以得到A右子树前序序列为CFH,中序遍历为CHF。接下来递归求解即可。

image.png

已知一棵二叉树的前根序序列和中根序序列,构造该二叉树的过程如下:


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


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


例题:

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


解题思路:

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


例题解释:

根据后序遍历可知根节点为c,结合中序遍历c左子树中序遍历为deba,前序遍历为dabe,右子树为空。接下来对左子树递归求解即可。

image.png

已知一棵二叉树的后根序序列和中根序序列,构造该二叉树的过程如下:


  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。

image.png


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

image.png

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


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


目录
相关文章
|
25天前
|
存储 算法 关系型数据库
深入理解InnoDB索引数据结构和算法
1. **索引定义**:索引是提升查询速度的有序数据结构,帮助数据库系统快速找到数据。 2. **索引类型**:包括普通索引、唯一索引、主键索引、空间索引和全文索引,每种有特定应用场景。 3. **数据结构**:InnoDB使用B+树作为索引结构,确保所有节点按顺序排列,降低查询时的磁盘I/O。 4. **B+树特性**:所有数据都在叶子节点,非叶子节点仅存储索引,提供高效范围查询。 5. **索引优势**:通过减少查找数据所需的磁盘I/O次数,显著提高查询性能。 **总结:**InnoDB索引通过B+树结构,优化了数据访问,使得查询速度快,尤其适合大数据量的场景。
27 0
深入理解InnoDB索引数据结构和算法
|
29天前
|
存储 算法 Serverless
【C/C++ 数据结构】深入探索数据结构中算法复杂度:从C++和数学的视角
【C/C++ 数据结构】深入探索数据结构中算法复杂度:从C++和数学的视角
46 0
|
17天前
|
存储 算法 索引
【算法与数据结构】队列的实现详解
【算法与数据结构】队列的实现详解
|
21天前
|
算法
【算法与数据结构】二叉树(前中后)序遍历2
【算法与数据结构】二叉树(前中后)序遍历
|
28天前
|
存储 算法 Java
Java数据结构与算法-java数据结构与算法(二)
Java数据结构与算法-java数据结构与算法
76 1
|
12天前
|
算法
算法系列--动态规划--背包问题(4)--完全背包拓展题目(上)
算法系列--动态规划--背包问题(4)--完全背包拓展题目(上)
18 0
|
17天前
|
算法 索引
【算法与数据结构】深入二叉树实现超详解(全源码优化)
【算法与数据结构】深入二叉树实现超详解(全源码优化)
|
17天前
|
存储 算法
【算法与数据结构】深入解析二叉树(二)之堆结构实现
【算法与数据结构】深入解析二叉树(二)之堆结构实现
|
21天前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解
|
21天前
|
存储 算法 C语言
【算法与数据结构】 C语言实现单链表队列详解1
【算法与数据结构】 C语言实现单链表队列详解

热门文章

最新文章