劍指offer第四題 重建二叉樹(c 實現)

2021-09-26 04:53:18 字數 1124 閱讀 1964

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

乙個小tips:

查詢元素在vector中位置可以用vector::iterator iter=find(v.begin(),v.end(),num)函式和distance(v.begin(),iter)函式

#include #include #include #include using namespace std; 

struct treenode

};treenode* reconstructbinarytree(vectorpre,vectorvin)

int root = pre.at(0);

treenode* result=new treenode(root);

vector::iterator iter = find(vin.begin(),vin.end(),root);

int ltn = distance(vin.begin(),iter);

vectorpre_lft,pre_rgt;

vectorvin_lft,vin_rgt;

for(int i=0;ileft=reconstructbinarytree(pre_lft,vin_lft);

result->right=reconstructbinarytree(pre_rgt,vin_rgt);

return result;

}vectorpreorder(treenode* tree)

stacktmpstack;

while(tree != null || !tmpstack.empty())

else

}return preoderv;

}int main()

; vectorvin=;

treenode* rectree = reconstructbinarytree(pre,vin);

vectorresult = preorder(rectree);

for(auto i : result)

return 0;

}

劍指offer程式設計題《重建二叉樹》

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。我們都知道,通過前序遍歷和中序遍歷或後序遍歷和中序遍歷可以唯一確定一棵二叉樹。前序 根 左 右 中序 左 根 右 後序 左 右 根 ...

劍指offer程式設計題 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。這道題目是一道非常經典的題目,這裡可以用乙個hash表存下中序遍歷的value的index,可以快速找到index definiti...

劍指offer程式設計題 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。方案 在二叉樹的前序遍歷序列中,第乙個數字總是樹的根節點的值 在二叉樹的中序遍歷序列中,根節點的值在序列的中間,根節點左側...