輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
例如,給出
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:
3
/ \9 20
/ \
15 7
二叉樹結構
public class treenode
}
前序遍歷特點:節點按照 [根節點|左子樹|右子樹] 排序
中序遍歷特點:節點按照 [左子樹|根節點|右子樹] 排序
根據以上特點,可得重構二叉樹的步驟:
前序遍歷的第乙個元素,是整個二叉樹的根節點(root)的值。
在中序遍歷中查詢根節點(root)的索引,由此索引,可以劃分中序遍歷(左子樹的右邊界、右子樹的左邊界)
根據子樹的左右邊界可以確定子樹的節點數量,進而劃分前序遍歷,可以確定左右子節點的值
class solution
public treenode build(int preorder,int pre_root,int in_left,int in_right,hashmapdic)
}
執行用時:2ms
記憶體消耗:40.1mb
leetcode 面試題07 重建二叉樹
解題思路 1 遞迴構造二叉樹,構建根節點,根據中序遍歷找到左子樹的節點和右子樹的結點,構建左子樹,構建右子樹 definition for a binary tree node.class treenode def init self,x self.val x self.left none self...
LeetCode 面試題07 重建二叉樹
先序遍歷第乙個元素就是根結點,中序遍歷根節點前面是它的左子樹,後邊是它的右子樹。根據這個思想可以遞迴的處理,每次得到乙個當前階段的根結點 先序遍歷第乙個元素 然後根據這個元素將中序遍歷劃分成兩個序列,分別是左子樹和右子樹的中序遍歷,根據這兩個序列的長度又可以從先序遍歷中得到它們對應的先序遍歷。這樣就...
面試題07 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7限制 0 節點個數 5000 題解 ...