劍指offer4 重建二叉樹

2022-05-16 13:50:42 字數 855 閱讀 7820

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

思路:使用遞迴的思想。

1 前序遍歷的第乙個數字pre[0],是整個二叉樹的根節點。然後遍歷中序序列,找到根節點所在位置i.

2 根據根節點所在中序序列位置i,將中序序列分成兩部分vin1,vin2,然後對應將前序序列也分成兩部分pre1,pre2.pre1的個數應和vin1的個數相同。

3 之後遞迴pre1,vin1.遞迴pre2,vin2.

**:

/*

* * definition for binary tree

* struct treenode

* }; */

class

solution

}//pre把根節點刨出去

vector pre1(pre.begin()+1,pre.begin()+i+1

); vector

pre2(pre.begin()+i+1

,pre.end());

//vin也把根節點刨出去

vector vin1(vin.begin(),vin.begin()+i);

vector

vin2(vin.begin()+i+1

,vin.end());

root->left =reconstructbinarytree(pre1,vin1);

root->right =reconstructbinarytree(pre2,vin2);

return

root;

}};

劍指offer4 重建二叉樹

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

劍指offer 4 重建二叉樹

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

劍指offer 4 重建二叉樹

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