1.根据一棵树的前序遍历与中序遍历构造二叉树
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
class Solution {
int index=0;
private TreeNode isbuildTree(int[] preorder,int[] inorder,int left,int right){
if(index >= preorder.length ||left >= right){
return null;
}
int rootIdx=left;
while(rootIdx<right){
if(preorder[index]==inorder[rootIdx]){
break;
}
rootIdx++;
}
TreeNode root = new TreeNode(preorder[index]);
++index;
root.left=isbuildTree(preorder,inorder,left,rootIdx);
root.right=isbuildTree(preorder,inorder,rootIdx+1,right);
return root;
}
public TreeNode buildTree(int[] preorder, int[] inorder) {
return isbuildTree(preorder,inorder,0,inorder.length);
}
}
2.根据一棵树的中序遍历与后序遍历构造二叉树
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
class Solution {
int index=0;
private TreeNode isbuildTree(int[] inorder, int[] postorder,int left,int right){
if(index < 0 || left >= right){
return null;
}
int rootIdx = left;
while(rootIdx < right){
if(inorder[rootIdx] == postorder[index]){
break;
}
++rootIdx;
}
TreeNode root = new TreeNode(postorder[index]);
--index;
root.right = isbuildTree(inorder,postorder,rootIdx+1,right);
root.left = isbuildTree(inorder,postorder,left,rootIdx);
return root;
}
public TreeNode buildTree(int[] inorder, int[] postorder) {
index=postorder.length-1;
return isbuildTree(inorder,postorder,0,inorder.length);
}
}