# include & ltmalloc.h & gt// malloc()等
# include & ltstdio.h & gt//標準I/O頭文件,包括EOF (= z或F6)、NULL等。
# include & ltstdlib.h & gt// atoi(),exit()
# include & ltmath.h & gt//數學函數頭文件,包括floor()、ceil()、abs()等。
# Define ClearBitree destroy bitree//清除二叉樹和銷毀二叉樹是壹樣的。
typedef結構位節點
{
int數據;//節點的值
BiTNode *lchild,* rchild//左右子指針
}BiTNode,* BiTree
int Nil = 0;//將整數設置為0為空。
無效訪問(內部)
{ printf("%d ",e);//以整數格式輸出
}
void init BiTree(BiTree & amp;t)
{//運算結果:構造壹個空二叉樹t。
T = NULL
}
void create BiTree(BiTree & amp;t)
{//算法6.4:按優先順序輸入二叉樹中節點的值(可以是字符,也可以是整數,在主程序中定義)。
//構造壹個二叉鏈表表示的二叉樹t。變量Nil代表壹個空的(子樹)。修改
int數;
scanf("%d ",& amp號);//輸入節點的值。
if(number==Nil) // node的值為空。
T = NULL
else // node的值不為空。
{ T =(BiTree)malloc(sizeof(bit node));//生成根節點
如果(!t)
退出(溢出);
t->;數據=數字;//將值賦給t指示的節點。
create bitree(T-& gt;l child);//遞歸構造左側子樹
create bitree(T-& gt;rchild);//遞歸構造右邊的子樹
}
}
void destroy BiTree(BiTree & amp;t)
{//初始條件:二叉樹t存在。操作結果:破壞二叉樹t。
If(T) //非空樹
{ destroy bitree(T-& gt;l child);//遞歸銷毀左子樹。如果沒有左子樹,將不執行任何操作。
destroy bitree(T-& gt;rchild);//遞歸銷毀右邊的子樹。如果沒有右子樹,將不執行任何操作。
免費(T);//釋放根節點
T = NULL//賦給0的指針為空
}
}
void PreOrderTraverse(BiTree T,void(*Visit)(int))
{//初始條件:二叉樹T存在,訪問是節點操作的應用函數。修正算法6.1
//操作結果:先遞歸遍歷T,每個節點調用函數Visit壹次且只能調用壹次。
If(T) // T不為空。
{訪問(T-& gt;數據);//首先訪問根節點。
前序遍歷(T-& gt;lchild,訪問);//首先遍歷左邊的子樹
前序遍歷(T-& gt;rchild,訪問);//最後,先遍歷右邊的子樹。
}
}
void InOrderTraverse(BiTree T,void(*Visit)(int))
{//初始條件:二叉樹T存在,訪問是節點操作的應用函數。
//操作結果:按中間順序遞歸遍歷T,每個節點調用函數Visit壹次且只能調用壹次。
如果(T)
{ in order traverse(T-& gt;lchild,訪問);//首先按中間順序遍歷左邊的子樹
訪問(T->;數據);//再次訪問根節點
in order traverse(T-& gt;rchild,訪問);//最後,中間的序列遍歷右邊的子樹。
}
}
void PostOrderTraverse(BiTree T,void(*Visit)(int))
{//初始條件:二叉樹T存在,訪問是節點操作的應用函數。
//運行結果:後序遞歸遍歷T,函數Visit調用壹次,每個節點只調用壹次。
If(T) // T不為空。
{ PostOrderTraverse(T-& gt;lchild,訪問);//依次遍歷左邊的子樹。
PostOrderTraverse(T-& gt;rchild,訪問);//然後依次遍歷右邊的子樹。
訪問(T->;數據);//最後壹次訪問根節點
}
}
void main()
{
BiTree T;
init bitree(T);//初始化二叉樹t
Printf("輸入二叉樹中壹階節點的值,輸入0表示節點為空。例如:1 2 0 0 3 0 0 \ n ");
create bitree(T);//建立二叉樹t
Printf("先遞歸遍歷二叉樹:\ n ");
PreOrderTraverse(T,visit);//先遞歸遍歷二叉樹T。
printf(" \ n二叉樹的中間遞歸遍歷:\ n ");
InOrderTraverse(T,visit);//以中間順序遞歸遍歷二叉樹T
printf(" \ n序列後二叉樹的反向遍歷:\ n ");
PostOrderTraverse(T,visit);//在序列後遞歸遍歷二叉樹t。
}