1. 程式人生 > >劍指offer面試題7:重建二叉樹(java實現)

劍指offer面試題7:重建二叉樹(java實現)

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹,假設輸入的前序遍歷和中序遍歷的結果都不含重複的數字。例如:輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6}則重建二叉樹:其中二叉樹的定義如下:

 * public class TreeNode {  *     int val;  *     TreeNode left;  *     TreeNode right;  *     TreeNode(int x) { val = x; }  * }  */

思路:   前序遍歷的第一個數字總是樹的根節點,在中序遍歷中,前序遍歷第一個值的左邊的數字位於根節點的左邊,右邊的數字位於根節點的右邊。以此類推:例如,由前序遍歷得出1是根節點,?️中序遍歷得出2,4,7在其左邊,3,5,6,8在其右邊。                             

奉上程式碼:

public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        TreeNode root = buildTree(pre,in,0,pre.length-1,0,in.length-1);
        return root;
    }
    public static TreeNode buildTree(int[] pre,int[] in,int startPre,int endPre,int startIn,int endIn){
        if(startPre>endPre ||startIn>endIn){
            return null;
        }
        TreeNode node = new TreeNode(pre[startPre]);
        for(int i=startIn;i<=endIn;i++){
            if(in[i]==pre[startPre]){
                int length = i-startIn;
                node.left =buildTree(pre,in,startPre+1,startPre+length,startIn,i-1);
                node.right = buildTree(pre,in,startPre+length+1,endPre,i+1,endIn);
            }
        }
            return node;
        }
}