劍指offer 4 二叉樹的重建

2021-08-19 21:10:50 字數 734 閱讀 6269

條件 知道前序遍歷和中序遍歷;求出此二叉樹; 函式原型為:

treenode* reconstructbinarytree(vectorpre,vectorvin)
思路:

先考慮特殊情況  不合法輸入的時候 或者只有乙個結點的時候

遞迴方法;求出根節點的左右子節點;

遞迴出兩個子函式 所以需要四個陣列;前序遍歷的 左右子樹;中序遍歷的左右子樹陣列

treenode* reconstructbinarytree(vectorpre,vectorin)

//從中序遍歷中找到根節點位置,並記錄下來 pos_root_of_in;

int pos_root_of_in=0;

while(in[pos_root_of_in]!=pre[0])

++pos_root_of_in;

vectorpre_left,pre_right,in_left,in_right;//左右子樹的前序遍歷數列與中序遍歷數列;

//左子樹的確定(前序的範圍:前序從第一位,到pos_root-of-in位);

for(int i=0;ileft=reconstructbinarytree(pre_left,in_left);

proot->right=reconstructbinarytree(pre_right,in_right);

return proot;

}

劍指offer4 重建二叉樹

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

劍指offer 4 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 中序序列中,節點左邊為左子樹,右邊為右子樹。前序第乙個為根節點 12 4 7 3 5 6 8 左 4 7 215 3...

劍指offer 4 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。演算法設計思想 前序遍歷序列的第乙個元素為根結點的值,然後在中序遍歷序列中尋找根節點的值的位置 索引 從中序遍歷序列的起始位置到根結...