# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def buildTree(self, preorder, inorder):
"""
:type preorder: List[int]
:type inorder: List[int]
:rtype: TreeNode
"""
if len(inorder) == 0:
return None
# 前序遍历第一个值为根节点
root = TreeNode(preorder[0])
# 因为没有重复元素,所以可以直接根据值来查找根节点在中序遍历中的位置
mid = inorder.index(preorder[0])
# 构建左子树
root.left = self.buildTree(preorder[1:mid+1], inorder[:mid])
# 构建右子树
root.right = self.buildTree(preorder[mid+1:], inorder[mid+1:])
return root
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length>0&&inorder.length>0){
TreeNode root = new TreeNode(preorder[0]);
//root.val=preorder[0];
int num=0;
for(int i =0; i<inorder.length; i++){
if(inorder[i]==root.val){
num=i;
}
}
int[] preLeft = Arrays.copyOfRange(preorder,1,num+1);
int[] preRight = Arrays.copyOfRange(preorder,num+1,preorder.length);
int[] inoLeft = Arrays.copyOfRange(inorder,0,num);
int[] inoRight = Arrays.copyOfRange(inorder,num+1,inorder.length);
root.left=buildTree(preLeft,inoLeft);
root.right=buildTree(preRight,inoRight);
return root;
}else{
return null;
}
}
}