题目
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
示例 1:
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
示例 2:
Input: preorder = [-1], inorder = [-1]
Output: [-1]
前置知识
- 前序遍历列表:第一个元素永远是 【根节点 (root)】
- 中序遍历列表:根节点 (root)【左边】的所有元素都在根节点的【左分支】,【右边】的所有元素都在根节点的【右分支】
算法思路:
- 通过【前序遍历列表】确定【根节点 (root)】
- 将【中序遍历列表】的节点分割成【左分支节点】和【右分支节点】
- 递归寻找【左分支节点】中的【根节点 (left child)】和 【右分支节点】中的【根节点 (right child)】
题解思路
既然根据前序遍历可以找到根节点,那么构建整个树只要把所有节点都补充起来不就好了?想到树,其实很容易想到递归的思路,因为树的结构是深层次的并且都有规律,根据中序遍历,可以确定左子树跟右子树,那么每次都把左子树跟右子树继续按照第一步的思路来:找到根节点,赋值,继续找左右子树,继续找根节点,赋值…
代码实现
1 | /** |
我很可爱,请给我钱
- 本文链接:https://cong1223.github.io/2021/07/28/%E3%80%90%E7%AE%97%E6%B3%95%E3%80%91%E9%87%8D%E5%BB%BA%E4%BA%8C%E5%8F%89%E6%A0%91/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub IssuesGitHub Discussions