手动建立一个二叉树,中序遍历二叉树。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