C++树的生成与遍历.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档