105. Construct Binary Tree from Preorder and Inorder Traversal
题目描述和难度
- 题目描述:
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3 / \ 9 20 / \ 15 7
- 题目难度:中等。
- 英文网址:105. Construct Binary Tree from Preorder and Inorder Traversal 。
- 中文网址:105. 从前序与中序遍历序列构造二叉树 。
思路分析
求解关键:
参考解答
参考解答1
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
int preLen = preorder.length;
int inLen = inorder.length;
return helper(preorder, 0, preLen - 1, inorder, 0, inLen - 1);
}
private TreeNode helper(int[] preorder,
int preL, int preR,
int[] inorder,
int inL, int inR) {
if (preL > preR || inL > inR) {
return null;
}
int rootVal = preorder[preL];
int l = inL;
while (l <= inR && inorder[l] != rootVal) {
l++;
}
TreeNode root = new TreeNode(rootVal);
root.left = helper(preorder, preL + 1, preL + l - inL, inorder, inL, l - 1);
root.right = helper(preorder, preL + l - inL + 1, preR, inorder, l + 1, inR);
return root;
}
}
本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0105-construct-binary-tree-from-preorder-and-inorder-traversal ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com 。