go 劍指offer07 重建二叉樹

2021-10-12 01:49:51 字數 1581 閱讀 6792

題目描述

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

例如,給出

前序遍歷 preorder = [3,9,20,15,7]

中序遍歷 inorder = [9,3,15,20,7]

返回如下的二叉樹:

3/ \

9  20

/  \

15   7

限制:0 <= 節點個數 <= 5000

我的解題思路:利用前序遍歷和中序遍歷的特點,前序遍歷第乙個值為二叉樹根節點,根據根節點找中序遍歷中的對應值下標,下標之前為左子樹,之後為右子樹,再遞迴即可

func buildtree(preorder int, inorder int) *treenode 

var newtree = new(treenode)

newtree.val = preorder[0]

var indextree = 0

var root = preorder[0]

for i:=0;i官方解答:思路大概一致,可有遞迴和迭代

class solution

mapindexmap = new hashmap();

int length = preorder.length;

for (int i = 0; i < length; i++)

treenode root = buildtree(preorder, 0, length - 1, inorder, 0, length - 1, indexmap);

return root;

}public treenode buildtree(int preorder, int preorderstart, int preorderend, int inorder, int inorderstart, int inorderend, mapindexmap)

int rootval = preorder[preorderstart];

treenode root = new treenode(rootval);

if (preorderstart == preorderend) else

}}

class solution 

treenode root = new treenode(preorder[0]);

int length = preorder.length;

stackstack = new stack();

stack.push(root);

int inorderindex = 0;

for (int i = 1; i < length; i++) else

node.right = new treenode(preorderval);

stack.push(node.right);}}

return root;

}}

複雜度分析

Leecode劍指 Offer 07 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7 限制 0 節點個數 5000 分析...

劍指offer07 重建二叉樹

這是乙個非常高頻的面試題。題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例子 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 思路 題目給出了前序和中序遍歷,我們可以知道前序的...

劍指 Offer 07 重建二叉樹

難度 中等 題目描述 解題思路 這道題之前做過,但是忘得乾乾淨淨了。現在再做一遍撿一撿,說不定哪次面試就出到了呢 總體思想就是遞迴,用雜湊表來儲存對應的中序遍歷的下標,空間換時間,免得每次都要去遍歷找下標。然後每次遞迴的時候,要給對應的左子樹和右子樹在對應陣列裡的下標,左端點大於右端點的時候返回空。...