輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。首先注意到題目中明確指出二叉樹遍歷結構不包含重複值,即所有節點值各異,基於此條件,我們才能夠由二叉樹前序遍歷與中序遍歷重建二叉樹,否則無法完成重建.例如,給出
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:
3/ \
9 20
/ \
15 7
對於二叉樹的重建,我們可以比較容易地使用遞迴實現,本文我們講解遞迴實現思路,暫不介紹迭代方法.
基於二叉樹前序遍歷的特性,我們能夠很快確定當前二叉樹的根節點位置.當確定根節點值後,進一步地,基於中序遍歷地特性,我們能夠將當前序列劃分為左子樹和右子樹.然後分別遞迴地重建左子樹和右子樹.基於前序遍歷地特性,我們也能夠在前序遍歷序列中快速確定左子樹與右子樹的根節點值,其中左子樹根節點值即是當前根節點的下乙個值,而右子樹根節點與當前節點距離等於左子樹節點個數.左子樹節點個數我們可以快速通過中序遍歷確定.
在重建二叉樹中,我們每次都需要確定當前根節點值在中序遍歷序列中的位置,從而將中序遍歷劃分為左子樹與右子樹. 我們可以使用鍵值對結構儲存節點值與其在中序遍歷序列中位置,從而在o(1)時間複雜度內完成查詢.
/**
* definition for a binary tree node.
* public class treenode
* }*/class
solution
public treenode buildtree
(int
preorder,
int[
] inorder)
}
Leetcode 重建二叉樹
leetcode 105 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。思路 前序遍歷 根節點 左子樹 右子樹 中序遍歷 左子樹 根節點 右子樹 根據兩個遍歷結果中都不存在重複數字,那麼前序遍歷的第乙個數值為起始點,找出該值在中序遍歷陣...
LeetCode 重建二叉樹
前序遍歷 中 左 右 中序遍歷 左 中 右 後序遍歷 左 右 中 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。definition for a binary tree node.struct treenode class soluti...
LeetCode 重建二叉樹
原題鏈結 劍指 offer 07.重建二叉樹 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20...