這個範例 建立二元樹及前序走訪、中序走訪、後序走訪,是我在 C&C++程式設計基礎班與實務進階班+資料結構 課程中先講解理論後,再輔以 樹狀圖形結構,並在課堂中撰寫完成(由無到有,一次OK喔^^),好讓學員可以知悉如何撰寫好的C&C++程式架構。高興的是全部學員都能理解並且聽懂如何建立二元樹及各種走訪。這一班的學員心得,請參考以下網址: http://tw.myblog.yahoo.com/yh-chiang/article?mid=691&prev=692&next=671
程式碼如下:
#include <stdio.h>
#include <stdlib.h>
struct Node
{
int data;
struct Node* L;
struct Node* R;
};
struct Node* root;
void insertBTree( struct Node** ROOT, int d )
{ //insertBTree( &root, int d )
if( *ROOT == NULL ) // first
{ struct Node* tmp;
tmp = (struct Node*)malloc( sizeof(struct Node) );
tmp->data = d;
tmp->L = NULL; tmp->R = NULL;
*ROOT = tmp;
}
else if( d < (*ROOT)->data )
insertBTree( &((*ROOT)->L) , d );
else if( d > (*ROOT)->data )
insertBTree( &((*ROOT)->R) , d );
}
void inOrder( struct Node* ROOT )
{
if( ROOT != NULL )
{
inOrder( ROOT->L );
printf( "%d\r\n", ROOT->data );
inOrder( ROOT->R );
}
}
void preOrder( struct Node* ROOT )
{
if( ROOT != NULL )
{
printf( "%d\r\n", ROOT->data );
preOrder( ROOT->L );
preOrder( ROOT->R );
}
}
void postOrder( struct Node* ROOT )
{
if( ROOT != NULL )
{
postOrder( ROOT->L );
postOrder( ROOT->R );
printf( "%d\r\n", ROOT->data );
}
}
int main(int argc, char *argv[])
{ int d;
root = NULL;
while( 1 )
{
printf( "Input a Value(0 is exit): " );
scanf( "%d", &d );
if( d == 0) break;
insertBTree( &root, d ); // 傳位址呼叫
}
printf( "Created a Tree...\r\n" );
printf( "Print Tree by inorder\r\n" );
inOrder( root ); // 傳值呼叫
printf( "Print Tree by preOrder\r\n" );
preOrder( root ); // 傳值呼叫
printf( "Print Tree by postOrder\r\n" );
postOrder( root ); // 傳值呼叫
system( "PAUSE" );
return 0;
}
沒有留言:
張貼留言