/**
* 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){
return null;
}else{
int[] index_pre = {0};
return buildTreeCore(preorder, inorder, index_pre, 0, (inorder.length - 1));
}
}
public TreeNode buildTreeCore(int[] preorder, int[] inorder, int[] index_pre, int l_inorder, int r_inorder) {
if(preorder[index_pre[0]] == 20){
System.out.printf("index: %d val: %d\r\n", index_pre[0], preorder[index_pre[0]]);
}
if(l_inorder == r_inorder){
TreeNode cur_node = new TreeNode(preorder[index_pre[0]]);
return cur_node;
}else{
TreeNode cur_node = new TreeNode(preorder[index_pre[0]]);
int index_preHead_in_inorder = 0;
for(int i = 0; i < inorder.length; ++i){
if(inorder[i] == preorder[index_pre[0]]){
index_preHead_in_inorder = i;
break;
}
}
if(l_inorder <= index_preHead_in_inorder - 1){
++index_pre[0];
cur_node.left = buildTreeCore(preorder, inorder, index_pre, l_inorder, index_preHead_in_inorder - 1);
}
if(index_preHead_in_inorder + 1 <= r_inorder){
++index_pre[0];
cur_node.right = buildTreeCore(preorder, inorder, index_pre, index_preHead_in_inorder + 1, r_inorder);
}
return cur_node;
}
}
}
105. Construct Binary Tree from Preorder and Inorder Traversal
最新推荐文章于 2019-09-08 17:34:01 发布