劍指offer7重建二叉樹

2021-10-18 07:22:54 字數 1288 閱讀 9088

我們是用遞迴來解決的,根據前序遍歷和中序遍歷的特點我們主要分為兩個步驟:

用前序遍歷找根(定義乙個索引preindex遍歷前序遍歷的陣列)

new乙個新節點將其此時posindex索引指向的值儲存起來(構建樹)

用中序遍歷找根的左子樹和根的右子樹(寫乙個finval函式用於在中序遍歷中找到前序遍歷索引指向的元素,然後返回在中序遍歷陣列的索引index,index左邊為其左子樹,右邊為其右子樹)

遞迴呼叫函式建立其左子樹和右子樹(不過注意條件的更新

下面結合來理解一下

;//更新條件

root.left=

buildtreechild

(preorder,inorder,begin,index-1)

; root.right=

buildtreechild

(preorder,inorder,index+

1,end)

;return root;

}//在中序遍歷中找對應的值

public

intfindval

(int

inorder,

int key,

int begin,

int end)

}return-1

;}public treenode buildtree

(int

preorder,

int[

] inorder)

}總結:中序遍歷和後續遍歷建立二叉樹和本題類似,只不過索引從後續遍歷陣列從後往前遍歷罷了,注意沒有前序遍歷後續遍歷建立二叉樹。

劍指offer7 重建二叉樹

輸入一棵二叉樹前序遍歷和中序遍歷的結果,請重建該二叉樹。注意 二叉樹中每個節點的值都互不相同 輸入的前序遍歷和中序遍歷一定合法 樣例 給定 前序遍歷是 3,9,20,15,7 中序遍歷是 9,3,15,20,7 返回 3,9,20,null,null,15,7,null,null,null,null...

劍指offer7 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並輸出它的頭節點。根據先序序列第乙個數確定樹的根節點,在中序序列中找到這個數所在的位置,此處左邊為左子樹,右邊為右子樹,根據遞迴建立二叉樹。...

劍指offer 7 重建二叉樹

因為各種各樣的原因,要開始準備春招,所以開始刷劍指offer 第二版 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。這個是個二叉樹很基礎的題啦,需要用遞迴來實現。主要講解在書的6...