- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C树的生成与遍历
树的生成与遍历 发表日期:2004年6月13日??出处:cangzhu??作者:cangzhu??已经有2340位读者读过此文
? 上次,应聘兼职时,他们给了我一些题目,其中的一道是,给我们一些数据,让我们生成树,并进行先,中,后序遍历!!
有问题的请E-mail:cangzhu@163.com
我的这样做的 :
//建立树的方法是,取数组的中间的数为树根,左边的为左子树,右边的为右子树
#include iostream.h#include stdio.h#include stdlib.h#include string.h#define N 10
//节点类class BNode {public:?int data;?BNode *lchild;?BNode *rchild;
?BNode()?{??data=0;??lchild=NULL;??rchild=NULL;?}?};
//二叉树类class BTree{private:?BNode *root;public:?//构造函数?BTree();?//析构函数?~BTree();
?//树的销毁?void Destroy(BNode *node);??//生成树?bool CreateTree(BNode *node,int data[],int len);?bool CreateTree(int data[],int len);
?//遍历?//先序?void FirstSearch(BNode *node);?void FirstSearch();??//中序?void MidSearch(BNode *node);?void MidSearch();??//后序?void LastSearch(BNode *node);?void LastSearch();};
//构造函数BTree::BTree(){??root=new BNode();}
//默认的析构函数BTree::~BTree(){?Destroy(root);}
//树的销毁void BTree::Destroy(BNode *node){?if(!node)??return;
?delete node;??FirstSearch(node-lchild);?FirstSearch(node-rchild);}
//递归的生成树bool BTree::CreateTree(BNode *node,int data[N],int len){?int i;???BNode *left=new BNode();?BNode *right=new BNode();
?//分割后,只剩一个数据?if(len==1)?{??node-data=data[0];??return true;?}?//分割后,只剩两个数据?if(len==2)?{??node-data=data[1];
??left=new BNode();??left-data=data[0];
??node-lchild=left;??node-rchild=NULL;??return true;?}
?//大于等于三个数据?int mid=(int)(len/2);?node-data=data[mid];?node-lchild=left;?node-rchild=right;
?//左边的数据,右边的数据?int left_data[N];?int right_data[N];
?//左子树的递归?for(i=0;imid;i++)?{??left_data[i]=data[i];?}?CreateTree(left,left_data,mid);
?//右子树的递归?for(i=0;ilen-mid-1;i++)?{??right_data[i]=data[mid+1+i];?}?CreateTree(right,right_data,len-mid-1);
?return true;}
//生成树的函数bool BTree::CreateTree(int data[N],int len){?return CreateTree(root,data,len);}
//先序遍历void BTree::FirstSearch(BNode *node){?if(!node)??return;
?printf(%d ,node-data);??FirstSearch(node-lchild);?FirstSearch(node-r
文档评论(0)