劍指offer 解題系列(4) 重建二叉樹

2021-08-01 05:17:42 字數 743 閱讀 8596

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

分析:

前序遍歷的特點是,開頭的是父節點!   那麼就可以利用前序遍歷的第乙個節點,把中序遍歷分割為左,右兩段,再通過左,右的長度,反過來把前序遍歷的序列也分割為兩段。。。。再把左,右兩段遞迴分割下去,直到葉節點為止。

實現**:

treenode* reconstructbinarytree(vectorpre,vectorvin) 

void reconstructbinarytree(treenode* &root,

vector&pre,int i,int j,

vector&vin,int m,int n ) }

int left_num = k-m;

int right_num = n-k;

reconstructbinarytree(root->left,

pre, i+1, i+left_num ,

vin, m, k-1 );

reconstructbinarytree(root->right,

pre, j-right_num+1, j,

vin, k+1, n ); }

劍指offer系列 4 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。網上大多只給出一種思路,就是遞迴 public treenode reconstructbinarytree int pre,int...

4 重建二叉樹(劍指offer)

4.重建二叉樹 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。1 思路 通常樹有如下幾種遍歷方式 前序遍歷 先訪問根結點,再訪問左子結點,最後訪問右子結點。root一般在最前 中...

劍指offer4 重建二叉樹

給出前序遍歷和中序遍歷,重新構建二叉樹.重建二叉樹主要就是遞迴,每一次新增乙個結點進入二叉樹,保證遞迴的順序和前序遍歷順序一致就ok了,多以左子樹的遞迴在前面,右子樹的遞迴放在後面,和前序遍歷的順序一致,第一次遞迴新增前序遍歷陣列中的第乙個,第二次遞迴新增的是前序遍歷陣列中的第二個.第n個就是陣列中...