/* 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; } 
|