二叉樹的建立:
如果要在記憶體中建立乙個如下左圖這樣的樹,wield
能讓每個結點確認是否有左右孩子,我們對它進行擴充套件,變成如下右圖的樣子,也就是將二叉樹中的每個結點的空指標引出乙個虛結點,其值為乙個特定值,比如」#
」,稱之為擴充套件二叉樹。擴充套件二叉樹就可以做到乙個遍歷序列確定一棵二叉樹了。如前序遍歷序列為ab#d##c##。
有了這樣的準備,就可以看看如何生成一棵二叉樹了。假設二叉樹的結點均為乙個字元,把剛才前序遍歷序列ab#d##c##
用鍵盤挨個輸入,實現的演算法如下所示。
精簡版
#include#include#includeusing namespace std;
struct bitree;
//設定空二叉樹
void setnull(struct bitree * bt)
//先序建立二叉樹操作
struct bitree * createbitree()
return bt ; // 返回根結點
}//前序遍歷二叉樹
void preorder(struct bitree * root)
}// 中序遍歷二叉樹
void inorder(struct bitree * root)
}//後序遍歷二叉樹
void postorder(struct bitree * root)
}int main();
//設定空二叉樹
void setnull(struct bitree * bt)
//先序建立二叉樹操作
struct bitree * createbitree()
//coutdata << endl;
else
cout<
preorder(root->lchild) ;
preorder(root->rchild) ;
}}// 中序遍歷二叉樹
void inorder(struct bitree * root)
}//後序遍歷二叉樹
void postorder(struct bitree * root)
}int main(){
int n = 10 ;
while(n--){
struct bitree * t ;
cout<
二叉樹 前序遍歷 中序遍歷 後序遍歷
前序遍歷 dlr 是二叉樹遍歷的一種,也叫做先跟遍歷,先序遍歷,前序周遊,可記做根左右。前序遍歷首先訪問根節點然後遍歷左子樹,最後遍歷右子樹。前序遍歷首先訪問根節點然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根節點,然後遍歷左子樹,最後遍歷右子樹。若二叉樹為空則結束返回,否則 1 ...
二叉樹前序,中序,後序遍歷詳解
只要是搞計算機的,對資料結構中二叉樹遍歷都不陌生,但是如果用到的機會不多那麼就會慢慢淡忘,溫故而之新才是最好的學習方式,現在就重新溫習一下這方面的知識。首先我想先改變這幾個遍歷的名字 前根序遍歷,中根序遍歷,後根序遍歷 前中後本來就是相對於根結點來說的,少乙個字會產生很多不必要的誤解。1.前根序遍歷...
二叉樹前序,中序,後序遍歷詳解
只要是搞計算機的,對資料結構中二叉樹遍歷都不陌生,但是如果用到的機會不多那麼就會慢慢淡忘,溫故而之新才是最好的學習方式,現在就重新溫習一下這方面的知識。首先我想先改變這幾個遍歷的名字 前根序遍歷,中根序遍歷,後根序遍歷 前中後本來就是相對於根結點來說的,少乙個字會產生很多不必要的誤解。1.前根序遍歷...