链接: LeetCode 105 从前序与中序遍历构建二叉树
总体思路:
二叉树 = 根结点 + 左子树 + 右子树
- 对于前序遍历中的每个结点,他们都可以看作一个根节点,他们都有自己的左右子树
- 每个结点之间的关系呢,就可以根据中序遍历断定
代码:
class Solution {
public int preIndex=0;
public TreeNode buildTreeChild(int [] preorder, int[] inorder,int inbegin,int inend){
if(inbegin>inend){//说明此时没有左树或者右树
return null;
}
TreeNode root = new TreeNode(preorder[preIndex]);//创建根节点
int rootIndex=findIndex(inorder,preorder[preIndex]);
preIndex++;
root.left=buildTreeChild(preorder,inorder,inbegin,rootIndex-1);//创建左子树
root.right=buildTreeChild(preorder,inorder,rootIndex+1,inend);//创建右子树
return root;
}
public int findIndex(int[] inorder,int val){
for(int i=0;i<inorder.length;i++){
if(inorder[i]==val){
return i;
}
}
return -1;
}
public TreeNode buildTree(int[] preorder, int[] inorder) {
return buildTreeChild(preorder,inorder,0,inorder.length-1);
}
}