手動建立一個二叉樹,中序遍歷二叉樹。spa
# include <stdio.h> # include <malloc.h> /* 定義節點的結構體 */ typedef struct tree { char data; //數據域 struct tree * lchild; //左孩子指針域 struct tree * rchild; //右孩子指針域 }TREE, * PTREE; //建立二叉樹 void CreateTree( PTREE ); //先序遍歷二叉樹 void PreOrderTree( PTREE ); /* 建立一個二叉樹 @param PTREE * tree 保存了指針變量的指針變量 return void */ void CreateTree( PTREE * tree ) { char data; scanf( "%c", &data ); if( ' ' == data ) { /* 若是輸入的是空格,就把這個指針賦值爲空, 表明這顆子樹是個空樹 */ *tree = NULL; } else { /* 若是輸入的不是空格,就動態建立一個空間 */ *tree = ( PTREE )malloc( sizeof( TREE ) ); (*tree) -> data = data; CreateTree( &((*tree) -> lchild) ); CreateTree( &((*tree) -> rchild) ); } } /* 先序遍歷二叉樹 */ void PreOrderTree( PTREE tree ) { if( NULL != tree ) { printf( "%c", tree -> data ); PreOrderTree( tree -> lchild ); PreOrderTree( tree -> rchild ); } } int main( void ) { PTREE t; printf( "建立一個樹:\n" ); CreateTree( &t ); printf( "先序遍歷二叉樹:\n" ); PreOrderTree( t ); printf( "\n" ); return 0; } /* VC++6.0 輸入的結果爲: ============================= 建立一個樹: ABEQ F CD 先序遍歷二叉樹: ABEQFCD ============================= 總結: 建立樹和遍歷樹的思路仍是很是類似的。 惟一一個問題是scanf那裏還有一點小疑問,等弄懂了 在補充到這裏。 */
學PHP的小螞蟻 博客 http://my.oschina.net/woshixiaomayi/blog.net