給定二叉樹的中序和後序遍歷構建二叉樹
阿新 • • 發佈:2019-02-10
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
if(inorder==null||inorder.length==0) return null;
return buildBinaryTree(inorder,0 ,inorder.length-1,postorder,0,postorder.length-1);
}
//遞迴呼叫重構二叉樹
private TreeNode buildBinaryTree(int[]inorder,int inleft,int inRight,int[]postorder,int postLeft,int postRight){
if(inleft>inRight)
return null;
TreeNode root=new TreeNode(postorder[postRight]);
//只有一個節點,直接返回root
if(inleft==inRight)
return root;
int rootNum=0;
for(int i=inleft;i<=inRight;i++){
if(inorder[i]==postorder[postRight]){
rootNum=i;
break;
}
}
int leftLength=rootNum-inleft;
//遞迴呼叫左子樹和右子樹
root.left=buildBinaryTree(inorder,inleft,inleft+leftLength-1 ,postorder,postLeft,postLeft+leftLength-1);
root.right=buildBinaryTree(inorder,inleft+leftLength+1,inRight,postorder,postLeft+leftLength,postRight-1);
return root;
}
public static void main(String[]args){
System.out.println("Hello World!");
}
}