前序 中序構建二叉樹,並遍歷

2021-09-25 16:42:31 字數 1633 閱讀 9592

首先,構建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 能讓每個結點確認是否有左右孩子,我們對它進行擴充套件,變成如下右圖的樣子,也就是將二叉樹中的每個結點的空指標引出乙個虛結點,其值為乙個特定值,比如 稱之為擴充套件二叉樹。擴充套件二叉樹就可以做到乙個遍歷序列確定一棵二叉樹了。如前序遍...