題目描述
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。我的解題思路:利用前序遍歷和中序遍歷的特點,前序遍歷第乙個值為二叉樹根節點,根據根節點找中序遍歷中的對應值下標,下標之前為左子樹,之後為右子樹,再遞迴即可例如,給出
前序遍歷 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 重建二叉樹
難度 中等 題目描述 解題思路 這道題之前做過,但是忘得乾乾淨淨了。現在再做一遍撿一撿,說不定哪次面試就出到了呢 總體思想就是遞迴,用雜湊表來儲存對應的中序遍歷的下標,空間換時間,免得每次都要去遍歷找下標。然後每次遞迴的時候,要給對應的左子樹和右子樹在對應陣列裡的下標,左端點大於右端點的時候返回空。...