劍指offer--04. 重建二叉樹

題目
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數(shù)字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹并返回。

思路:
遞歸思想,每次將左右兩顆子樹當成新的子樹進行處理,中序的左右子樹索引很好找,前序的開始結束索引通過計算中序中左右子樹的大小來計算,然后遞歸求解,直到startPre>endPre||startIn>endIn說明子樹整理完到。方法每次返回左子樹活右子樹的根節(jié)點

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        TreeNode root = reConstructBinaryTree(pre, 0, pre.length - 1, in, 0, in.length - 1);
        return root;
    }
    private TreeNode reConstructBinaryTree(int[] pre, int startPre, int endPre, int[] in, int startIn, int endIn) {

        if (startPre > endPre || startIn > endIn)
            return null;
        TreeNode root = new TreeNode(pre[startPre]);

        for (int i = startIn; i <= endIn; i++)
            if (in[i] == pre[startPre]) {
                root.left = reConstructBinaryTree(pre, startPre + 1, startPre + i - startIn, in, startIn, i - 1);
                root.right = reConstructBinaryTree(pre, i - startIn + startPre + 1, endPre, in, i + 1, endIn);
                break;
            }

        return root;
    }
}

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 題目描述: · 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不...
    FloatingIsland閱讀 104評論 0 0
  • 給定一個前序和中序變量的結果,寫一個算法重建這棵樹:前序: a b d c e f中序: d b a e c f...
    HangChen閱讀 592評論 0 3
  • 這幾天開學,學校還在上課,最近也是在找工作,很多天都沒有更新文章,現(xiàn)在補一篇二叉樹的文章。 最近校招公司的筆試陸續(xù)...
    zero_sr閱讀 4,093評論 0 5
  • 面試題7:重建二叉樹 題目: 輸入某二叉樹的前序遍歷和中序遍歷的結果。請重建該二叉樹。假設輸入的前序遍歷和中序遍歷...
    lyoungzzz閱讀 634評論 0 0
  • 覺察 親愛我看到你此刻很生氣,這緣于你小時侯,你不按媽媽要求的去辦,媽媽會生氣,你對你的孩子也是這樣,這是源于你...
    像花一樣綻放美麗閱讀 208評論 0 0

友情鏈接更多精彩內容