先序遍歷第乙個元素就是根結點,中序遍歷根節點前面是它的左子樹,後邊是它的右子樹。根據這個思想可以遞迴的處理,每次得到乙個當前階段的根結點(先序遍歷第乙個元素),然後根據這個元素將中序遍歷劃分成兩個序列,分別是左子樹和右子樹的中序遍歷,根據這兩個序列的長度又可以從先序遍歷中得到它們對應的先序遍歷。這樣就得到了左右子樹的先序遍歷和中序遍歷,遞迴進行即可。(不含重複數字)
python
# definition for a binary tree node.
# class treenode(object):
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class solution(object):
def buildtree(self, preorder, inorder):
""":type preorder: list[int]
:type inorder: list[int]
:rtype: treenode
"""if len(preorder) == 0:
return none
for i in range(len(inorder)):
if inorder[i] == preorder[0]:
break
left_inorder = inorder[0:i]
right_inorder = inorder[i+1:]
left_preorder = preorder[1:1+len(left_inorder)]
right_preorder = preorder[1+len(left_inorder):]
result = treenode(preorder[0], self.buildtree(left_preorder, left_inorder), self.buildtree(right_preorder, right_inorder))
return result
c++
/**
* definition for a binary tree node.
* struct treenode
* };
*/#include #include #include class solution
treenode* recursionbuild(vector::iterator prebegin, vector::iterator preend,vector::iterator inbegin, vector::iterator inend )
};
leetcode 面試題07 重建二叉樹
解題思路 1 遞迴構造二叉樹,構建根節點,根據中序遍歷找到左子樹的節點和右子樹的結點,構建左子樹,構建右子樹 definition for a binary tree node.class treenode def init self,x self.val x self.left none self...
LeetCode 面試題07 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7二叉樹結構 public class...
面試題07 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7限制 0 節點個數 5000 題解 ...