::递归实现——创建二叉树 ----> 装入数据--->遍历---> 显示 --->销毁::递归实现)

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

/* twoTree.cpp

在 c++环境编译 !

创建二叉树 ----> 装入数据,

---->遍历---> 显示 --->销毁*

都换用递归实现了 非递归实现还不怎么熟悉所以就

*/

#include <iostream.h>

#ifndef DEBUG

#define DEBUG

typedef int DataType;

typedef struct Node

{

DataType data;

struct Node *LChild;

struct Node *RChild;

}Node;

/*树的数据结构*/

/////////////////////////////////////////////////////////////

Node * Initiate()

/*初始化为空树*/

{

Node *root = 0;

return root ;

}

////////////////////////////////////////////////////////////////

Node * Creat( DataType data )

/*建节点*/

{

Node * Temp = new Node ;

Temp -> data = data ;

Temp -> LChild = 0 ;

Temp -> RChild = 0;

return Temp ;

}

/************************************************/

void Insert( Node *&root , DataType data )

//在c下不能这样 Node *&root

/* 降顺序二叉数装入数据,左子树<右子树*/

{

Node *p = Creat( data );

if( !root )

{

root = p;

}

else if( p->data < root->data )

{

Insert ( root->LChild , p->data );

}

else

{

Insert ( root->RChild , p->data );

} /*相等的 将装数据到右孩子 */

}

/****************************************************/

void PrintTree(Node * root)

/*递归中序遍历 ---> 显示从小到大*/

{

if( !root ) return ;

PrintTree(root->LChild);

cout<< root->data <<" :";

PrintTree( root->RChild );

return ;

}

/*********************************************************/

void FreeTree(Node * root)

{

if( !root ) return;

FreeTree(root -> LChild);

FreeTree(root -> RChild);

delete root;//跟节点要最后删!

}

#endif DEBUG

///测试代码////////////

void main()

{

int a;

Node *Root = Initiate() ;

cout<<" -1 to exit: "<<endl;

cin>>a;

while( (a != -1)&&cin.good() )

//遇到非法输入同样退出循环

{

Insert( Root , a );

cin>>a ;

}

if(!cin.good())

//输出错误信息

{

cout<<" the type is error ! "<<endl;

}

PrintTree(Root);

cout<<" ok ? "<<endl;

FreeTree(Root);//销毁树 防止内存泄漏

return;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有