劍指offer 重建二叉樹

2022-07-14 13:36:29 字數 1050 閱讀 5160

重建二叉樹的前置知識:

0、遍歷二叉樹:

(1)前序遍歷:根左右 --> 先訪問根節點,再前序遍歷左子樹,最後前序遍歷右子樹;

(2)中序遍歷:左根右 --> 先中序遍歷左子樹,再訪問根節點,最後中序遍歷右子樹。

(3)後序遍歷:左右根 --> 先後序遍歷左子樹,再後序遍歷右子樹,組後訪問根節點。

1、重建二叉樹:

(1)前序+中序:前序遍歷序列和中序遍歷序列可以確定唯一的二叉樹

(2)中序+後序:中序遍歷序列和後序遍歷序列可以確定唯一的二叉樹

2、構建整個二叉樹和構建子二叉樹的過程相同。

重建二叉樹的js**:

1

/*function treenode(x) */6

function

reconstructbinarytree(pre, vin)712

13//

前序遍歷序列的第乙個元素就是根節點

14var treenode =

1718

//根據前序遍歷序列的根節點,找到中序遍歷的根節點及其下標

19for(var i = 0; i < pre.length; i++) 27}

28return

treenode;

29 }

遞迴重建二叉樹演算法的重要條件:

已知條件:假設二叉樹節點數量為n

0、前序遍歷的特性

1、中序遍歷的特性

2、二叉樹的節點數量n

3、前序遍歷序列的第0個元素就是根節點

推論:0、中序遍歷序列中根節點的下標i(結合條件3,可推斷出)。

1、左子樹節點數量為i(結合條件1、推論0,可推斷出)。

2、中序遍歷序列的0到i-1個元素是左子樹中序遍歷序列,i+1到最後乙個元素是右子樹中序遍歷序列(結合條件1、推論1,可推斷出)。

3、前序遍歷序列的1到i+1個元素是左子樹中序遍歷序列,i+1到最後乙個元素是右子樹中序遍歷序列(結合條件0、條件3、推論1,可推斷出)。

劍指offer 重建二叉樹

重建二叉樹2.cpp 定義控制台應用程式的入口點。題目描述 輸入乙個二叉樹的前序遍歷和中序遍歷,輸出這顆二叉樹 思路 前序遍歷的第乙個節點一定是這個二叉樹的根節點,這個節點將二叉樹分為左右子樹兩個部分,然後進行遞迴求解 include stdafx.h include vector using na...

《劍指offer》重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,則重建二叉樹並返回。輸入乙個樹的前序和中序,例如輸入前序遍歷序列和中序遍歷序列 根據輸入的前序和中序,重建乙個該二叉樹,並返回該樹的根節點。definition for binary...

劍指offer 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。definition for binary tree struct treenode class solution if ...