《劍指offer》 2 重建二叉樹

2021-08-17 06:13:48 字數 1140 閱讀 2717

題目描述:

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹並輸出頭結點。假設輸入的前序遍歷和中序遍歷的結果中不含重複的數字。

**:

//題目示例

//先序遍歷:1 2 4 7 3 5 6 8

//中序遍歷:4 7 2 1 5 3 8 6

//構建普通二叉樹

// 1

// / \

// 2 3

// / / \

// 4 5 6

// \ /

// 7 8

struct binarytreenode

;binarytreenode* constructtreecore(int* startpreorder,int* endpreorder,int* startinorder,int* endinorder)

//在中序遍歷中找到根結點的值

int* rootinorder=startinorder;

while(rootinorder<=endinorder && *rootinorder!=rootvalue)

++rootinorder;

if(rootinorder==endinorder && *rootinorder!=*endinorder)

throw std::exception("invalid input");

int leftlength=rootinorder-startinorder;

int* leftpreorderend=startpreorder+leftlength;

if(leftlength>0)

if(leftlengthm_nright=constructtreecore(leftpreorderend+1,endpreorder,rootinorder+1,endinorder);

} return root;

}binarytreenode* constructtree(int* preorder,int* inorder,int length)

4 重建二叉樹(劍指offer)

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

劍指offer 樹 7 重建二叉樹

使用雜湊表map記錄中序遍歷每個元素的位置 利用性質 1.先序遍歷的第乙個節點是根節點 2.中序遍歷的根節點的左邊是左子樹,右邊是右子樹 假設左子樹的中序遍歷的長度是len,在前序遍歷中,根節點後面len個數,是左子樹的前序遍歷,剩下的數是右子樹的前序遍歷 根據左右子樹的前序遍歷和中序遍歷,我們先遞...

劍指offer4 重建二叉樹

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