1. 程式人生 > >給定二叉樹的中序和後序遍歷構建二叉樹

給定二叉樹的中序和後序遍歷構建二叉樹

這裡寫圖片描述

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!"); } }