二叉樹的建立、先序、中序以及後序遍歷
阿新 • • 發佈:2019-02-09
二叉樹結點結構與雙鏈表結點結構式類似的,建立二叉樹時,需清楚其結點結構。至於先序遍歷、中序遍歷以及後序遍歷方法,採用思想都是遞迴的思想。
先建立如下二叉樹(黃色中的0,當輸入為0時,返回上一級,按先序方式建立二叉樹)
輸入順序為: 1234000500607900800
先序遍歷輸出為: 123456798
中序遍歷輸出為: 432516978
後序遍歷輸出為: 435298761
程式程式碼為:
// Bitree.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> using namespace std; typedef int type; //定義數結點 typedef struct bNode { type data; struct bNode *lchild; struct bNode *rchild; }bNode,*bTree; //先序建立二叉樹 bTree CreateBitree(bTree &T) { type ch; cin>>ch; if(0==ch) { T=NULL; } else { T=(bTree)malloc(sizeof(bNode)); if(NULL==T) { cout<<"申請記憶體失敗!"<<endl; return NULL; } T->data=ch; CreateBitree(T->lchild); CreateBitree(T->rchild); } return T; } //先序遍歷 void PreOrder(bTree T) { if(T) { cout<<T->data<<" "; PreOrder(T->lchild); PreOrder(T->rchild); } } //中序遍歷 void InOrder(bTree T) { if(T) { InOrder(T->lchild); cout<<T->data<<" "; InOrder(T->rchild); } } //後序遍歷 void PostOrder(bTree T) { if(T) { PostOrder(T->lchild); PostOrder(T->rchild); cout<<T->data<<" "; } } int _tmain(int argc, _TCHAR* argv[]) { bTree T; CreateBitree(T); PreOrder(T); cout<<endl; InOrder(T); cout<<endl; PostOrder(T); return 0; }
程式輸出為:
計算樹的深度,為左子樹和右字樹的最大深度加1
//計算樹的深度
int TreeDepth(bTree T)
{
if(!T) return 0;
int n1=TreeDepth(T->lchild);
int n2=TreeDepth(T->rchild);
return (n1>n2?n1:n2)+1;
}
結果為: