105 Construct Binary Tree from Preorder and Inorder Traversal

Given preorder and inorder traversal of a tree, construct the binary tree.

Example:

preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]
output [3,9,20,null,null,15,7]

解釋下題目:

給定先序遍歷和中序遍歷的數(shù)組,構(gòu)造出對(duì)應(yīng)一棵樹(shù)。

1. 迭代

實(shí)際耗時(shí):8ms

    public TreeNode buildTree(int[] preorder, int[] inorder) {
        return recursive(preorder, 0, preorder.length, inorder, 0, inorder.length);
    }

    public TreeNode recursive(int[] preorder, int preStart, int preEnd, int[] inorder, int inStart, int inEnd) {
        if (preStart >= preorder.length || inStart >= inorder.length || preStart > preEnd || inStart > inEnd) {
            return null;
        }
        TreeNode root = new TreeNode(preorder[preStart]);

        //找到分割點(diǎn)的下標(biāo)
        int index = -1;
        for (int i = inStart; i <= inEnd; i++) {
            if (inorder[i] == preorder[preStart]) {
                index = i;
                break;
            }
        }

        root.left = recursive(preorder, preStart + 1, preorder.length, inorder, inStart, index - 1);
        root.right = recursive(preorder, preStart + index - inStart + 1, preorder.length, inorder, index + 1, inEnd);
        return root;

    }

??思路:因?yàn)槭菢?shù)的問(wèn)題,所以肯定是遞歸。然后在先序數(shù)組和中序數(shù)組中找一個(gè)相同的元素(題目中說(shuō)了所有的節(jié)點(diǎn)的值都互不相同),這個(gè)元素必定是當(dāng)前所在的這一層的根元素,然后inorder的左邊就是左子樹(shù),而右邊是右子樹(shù),遞歸即可。

時(shí)間復(fù)雜度O(n^2)
空間復(fù)雜度O(1)

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容