5.22——105. 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
1.解题思路
对于任意一颗树而言,前序遍历的形式总是[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]
即根节点总是前序遍历中的第一个节点。而中序遍历的形式总是[ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]
这道题的重点在于:对上述形式中的所有左右括号进行定位。每次递归都能找到左子树的节点个数是能否解对这道题的关键。
①左子树片段范围:
先序序列:pre[1] ~ pre[1 + 左子树的节点个数]
中序序列:mid[0] ~ mid[左子树的节点个数]
②右子树片段范围:
先序序列:pre[1 + 左子树的节点个数] + 1 ~ pre[-1]
中序序列:mid[左子树的节点个数 + 1] ~ mid[-1]
下面代码中 h[root] - mids 即为左子树的节点个数
2.源码

浙公网安备 33010602011771号