當前位置:編程學習大全網 - 編程語言 - 遍歷算法編程主題

遍歷算法編程主題

main.cpp文件的代碼如下:

# 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。

}

  • 上一篇:面向對象中關於java“引用”的詳細解說包括所涉及的知識點
  • 下一篇:內存條的基礎知識
  • copyright 2024編程學習大全網