private int index = 0;
public TreeNode buildTree(int[] preorder,int[] inorder){
index = 0;
return buildTreeHelper(preorder,inorder,0,inorder.length);
}
private TreeNode buildTreeHelper(int[] preorder,int[] inorder,int inorderLeft,int inorderRight){
//先处理非法情况
if(inorderLeft >= inorderRight){
return null;
}
if(index >= preorder.length){
return null;
}
//取出当前值,构造当前子树的根节点
TreeNode root = new TreeNode(preorder[index]);
index++;
//需要找到这个结点在中序遍历处的位置
int pos = find(inorder,inorderLeft,inorderRight,root.val);
root.left = buildTreeHelper(preorder,inorder,inorderLeft,pos);
root.right = buildTreeHelper(preorder,inorder,pos+1,inorderRight);
return root;
}
private int find(int[] inorder,int inorderLeft,int inorderRight,int val){
for(int i = inorderLeft;i < inorderRight;i++){
if(inorder[i] == val){
return i;
}
return -1;
}
}
Java--根据一棵树的先序遍历和中序遍历构建二叉树
最新推荐文章于 2024-05-14 22:48:28 发布