首先,構建binarytree.h標頭檔案
//
// created by janzeeliu on 2019-07-28.
//#ifndef binarytree_h
#define binarytree_h
#include #include struct treenode
};class binarytree;
#endif //binarytree_h
在編寫binarytree.cpp檔案來實現.**件中的介面
//
// created by janzeeliu on 2019-07-28.
//#include #include #include #include "binarytree.h"
binarytree::binarytree()
binarytree::binarytree(const std::vector&preorder,const std::vector&inorder)
treenode* binarytree::buildtree(const std::vector&preorder,const std::vector&inorder)
treenode* binarytree::helper(const std::vector& pre,int s1,int e1,const std::vector& post,int s2,int e2)
//void binarytree::preorder(const treenode* tree)
std::vectorbinarytree::preorder(const treenode* root)
void binarytree::helper(const treenode* root,std::vector&result)
//std::vectorbinarytree::preorder(const treenode* root)
// if(!st.empty())
// }
// return res;
//}
再編寫main函式來使用一下
#include #include #include "binarytree.h"
int main() ;
std::vectorinorder;
binarytree tree(preorder,inorder);
std::vectorresult;
result=tree.preorder(tree.getroot());
for(auto tmp:result)
std::cout《正確輸出應該是:3,9,20,15,7.
但是我的輸出是:3,9
當helper函式這樣寫時,輸出3,20,7
void binarytree::helper(const treenode* root,std::vector&result)
說明樹的構造是沒有問題的,從結果看來,一遇到return,函式就返回了,而不是繼續遞迴,真是奇怪,這是乙個很常規的遞迴遍歷方式,但是卻不能輸出正確結果,不知道是不是編譯器的問題,我使用的是clion編譯器。 重建二叉樹,根據前序中序遍歷構建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。前序遍歷 根左右 中序遍歷 左根右 根據前序遍歷我們可以知道根節點,根據中序遍歷我們可以知道根節點的左右子樹結點有哪些。如 前序 中...
二叉樹遍歷(前序,中序,後序
二叉樹的遍歷有三種方式,如下 1 前序遍歷 dlr 首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。簡記根 左 右。2 中序遍歷 ldr 首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。簡記左 根 右。3 後序遍歷 lrd 首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點。簡記左 右 根。例1 如上圖...
前序建立二叉樹 前序 中序 後序遍歷二叉樹
二叉樹的建立 如果要在記憶體中建立乙個如下左圖這樣的樹,wield 能讓每個結點確認是否有左右孩子,我們對它進行擴充套件,變成如下右圖的樣子,也就是將二叉樹中的每個結點的空指標引出乙個虛結點,其值為乙個特定值,比如 稱之為擴充套件二叉樹。擴充套件二叉樹就可以做到乙個遍歷序列確定一棵二叉樹了。如前序遍...