輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
分析:
前序遍歷的特點是,開頭的是父節點! 那麼就可以利用前序遍歷的第乙個節點,把中序遍歷分割為左,右兩段,再通過左,右的長度,反過來把前序遍歷的序列也分割為兩段。。。。再把左,右兩段遞迴分割下去,直到葉節點為止。
實現**:
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個就是陣列中...