//recursive
public TreeNode buildTree(int[] preorder, int[] inorder) {
// Start typing your Java solution below
// DO NOT write main() function
if(preorder.length == 0 || preorder.length != inorder.length) return null;
return buildTree(preorder, inorder, 0, preorder.length - 1, 0, inorder.length - 1);
}
public TreeNode buildTree(int[] preorder, int[] inorder, int prestart, int preend, int instart, int inend) {
if(prestart > preend || instart > inend) return null;
TreeNode root = new TreeNode(preorder[prestart]);
if(prestart == preend) return root;
int index = instart;
while(index <= inend && inorder[index] != preorder[prestart]) index++;
root.left = buildTree(preorder, inorder, prestart + 1, index - instart + prestart, instart, index - 1);
root.right = buildTree(preorder, inorder, index - instart + prestart + 1, preend, index + 1, inend);
return root;
}
//iterative
public TreeNode buildTree(int[] preorder, int[] inorder) {
// Start typing your Java solution below
// DO NOT write main() function
if(preorder.length == 0 || preorder.length != inorder.length) return null;
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode root = new TreeNode(preorder[0]);
stack.push(root);
int preindex = 1;
int inindex = 0;
TreeNode current = root;
while(preindex < preorder.length) {
boolean flag = false;
while(!stack.empty() && inorder[inindex] == stack.peek().val) {
current = stack.pop();
inindex++;
flag = true;
}
TreeNode next = new TreeNode(preorder[preindex++]);
stack.push(next);
if(flag == false) {
current.left = next;
}else {
current.right = next;
}
current = next;
}
return root;
}
Construct Binary Tree from Preorder and Inorder Traversal
最新推荐文章于 2024-01-17 14:50:43 发布
