当前位置: 首页 > news >正文

石家庄市网站建设_网站建设公司_MongoDB_seo优化

公司网站有收录没排名,建筑公司网站源码 php,wordpress 建立网站,网商之窗挂二叉树的先序,中序,后序遍历以及线索二叉树的遍历(2008-05-04 17:52:49)标签#xff1a;杂谈C二叉树的先序,中序,后序遍历以及线索二叉树的遍历头文件//*******************************************************************************//二叉树中的数据类型为ElemType//***…二叉树的先序,中序,后序遍历以及线索二叉树的遍历(2008-05-04 17:52:49)标签杂谈C二叉树的先序,中序,后序遍历以及线索二叉树的遍历头文件//*******************************************************************************//二叉树中的数据类型为ElemType//*******************************************************************************// BinaryTree.h: interface for the CBinaryTree class.////#include //C语言#define OK 1#define ERROR 0class CBinaryTree{public:CBinaryTree();virtual ~CBinaryTree();protected:typedef int ElemType;struct Node{ //数据ElemType data; //数据域信息int lt; //前继指针标志int rt; //后继指针标志Node* lchild; //指向左孩子Node* rchild; //指向右孩子}*root,*head;public:int Create();int PreOrderTraverse();int MidOrderTraverse();int LastOrderTraverse();void LevelOrderTraverse();int GetLeafCount();int GetDepth();int GetNodeCount();int MidOrderTraverseThr();void ChangeLeftRight();void Destroy();private: //重载以上函数,供以上函数调用int Create(Node* node);int PreOrderTraverse(Node*node);int MidOrderTraverse(Node*node);int LastOrderTraverse(Node *node);int GetLeafCount(Node*node);void GetNodeCount(Node*node,int count);int GetDepth(Node*node);void ChangeLeftRight(Node*node);void Visit(Node*node);void Destroy(Node*node);};// 实现文件// BinaryTree.cpp: implementation of the CBinaryTree class.#include BinaryTree.h#include Stack.h#include Queue.h//// Construction/Destruction//CBinaryTree::CBinaryTree(){rootNULL;headNULL;}CBinaryTree::~CBinaryTree(){Destroy();}int CBinaryTree::Create(){ //创建一个二叉树return Create(root);//用户调用此函数创建根结点由此函数调用其内的//CreateNode()创建除根结点外的其它所有结点}int CBinaryTree::PreOrderTraverse(){ //先序遍历二叉树return PreOrderTraverse(root);}int CBinaryTree::MidOrderTraverse(){ //中序遍历二叉树return MidOrderTraverse(root);}int CBinaryTree::LastOrderTraverse(){ //后序遍历二叉树return LastOrderTraverse(root);}void CBinaryTree::LevelOrderTraverse(){ //借助于堆栈,完成二叉树的层次遍历CQueue queue;if(!root) return;queue.InitQueue();Node*proot; //初始化Visit(p);queue.EnQueue((long)p);//访问根结点并将根结点地址入队while(!queue.QueueEmpty()){ //当队非空时重复执行下列操作p(Node*)queue.DeQueue(); //地址出队if(p-lchild){Visit(p-lchild);queue.EnQueue((long)p-lchild); //处理左孩子}if (p-rchild){Visit(p-rchild);queue.EnQueue((long)p-rchild); //处理右孩子}}}int CBinaryTree::GetLeafCount(){ //返回叶子结点数return GetLeafCount(root);}int CBinaryTree::GetNodeCount(){ //返回总结点数int count0;GetNodeCount(root,count);return count;}int CBinaryTree::GetDepth(){ //返回二叉树的深度return GetDepth(root);}void CBinaryTree::ChangeLeftRight(){ //交换左右两孩子结点if(root!NULL)ChangeLeftRight(root);}int CBinaryTree::Create(Node *node){int i;cout不创建本结点):;cini;if(i0)nodeNULL;else{if(!(nodenew Node))return ERROR;node-datai;node-lt0;node-rt0;Create(node-lchild); //创建左子树Create(node-rchild); //创建右子树}return OK;}int CBinaryTree::PreOrderTraverse(Node *node){if(node!NULL){coutdataif(PreOrderTraverse(node-lchild)) //遍历左子树if(PreOrderTraverse(node-rchild)) //遍历右子树return 1;return 0;}elsereturn 1;}int CBinaryTree::MidOrderTraverse(Node *node){if(node!NULL){if(MidOrderTraverse(node-lchild))//遍历左子树coutdataif(MidOrderTraverse(node-rchild))//遍历右子树return 1;return 0;}elsereturn 1;}int CBinaryTree::LastOrderTraverse(Node *node){if(node!NULL){if(LastOrderTraverse(node-lchild)) //遍历左子树if(LastOrderTraverse(node-rchild)) //遍历右子树{coutdatareturn 1;}return 0;}elsereturn 1;}int CBinaryTree::MidOrderTraverseThr(){ //中序线索化二叉树if(head!NULL)delete head;headnew Node;if(headNULL)return 0;int i0;Node*preNULL,*curNULL;long *tempnew long[GetNodeCount()];head-lt0; //无前驱,有左孩子head-rt1; //有后继,无右孩子head-rchildhead;if(rootNULL)head-lchildhead;else{head-lchildroot;prehead;curroot;for(;i0 || cur!NULL;){for(;cur!NULL;temp[i](long)cur,i,curcur-lchild);if(i0){cur(Node*)temp[--i];coutdataif(cur-lchildNULL){cur-lt1;cur-lchildpre;}if(pre-rchildNULL){pre-rt1;pre-rchildcur;}precur;curcur-rchild;}}pre-rchildhead;pre-rt1;head-rchildpre;}delete temp;return 1;}void CBinaryTree::GetNodeCount(Node *node,int count){if(node!NULL)count;elsereturn;GetNodeCount(node-lchild,count);//统计左子树个数GetNodeCount(node-rchild,count);//统计右子树个数}int CBinaryTree::GetDepth(Node *node){int d0,depthr0,depthl0;if (nodeNULL)return 0; // 如果是空树则其深度为 0else{depthlGetDepth(node-lchild); //求node的左子树的深度depthrGetDepth(node-rchild); //求node的右子树的深度return depthldepthr?1depthl:1depthr;}}int CBinaryTree::GetLeafCount(Node *node){int n,m;if(nodeNULL)return 0; // 如果二叉树是空树则返回 0else if((node-lchildNULL) (node-rchildNULL))return 1; //如果二叉树的左孩子和右孩子均为空则返回1else // 如果二叉树的左孩子或右孩子不为空{nGetLeafCount(node-lchild); //求左子树的叶子结点数目mGetLeafCount(node-rchild); //求右子树的叶子结点数目return nm; // 返回总的叶子结点数目}}void CBinaryTree::ChangeLeftRight(Node *node){if(node!NULL){ChangeLeftRight(node-lchild);ChangeLeftRight(node-rchild);Node*tempnode-lchild;node-lchildnode-rchild;node-rchildtemp;}}void CBinaryTree::Visit(Node *node){ //访问结点coutdata}void CBinaryTree::Destroy(){ //销毁二叉树Destroy(root);rootNULL;if(head)delete head;headNULL;}void CBinaryTree::Destroy(Node *node){if(node!NULL){Destroy(node-lchild);Destroy(node-rchild);delete node;nodeNULL;}}分享喜欢0赠金笔加载中请稍候......评论加载中请稍候...发评论登录名 密码 找回密码 注册记住登录状态昵   称评论并转载此博文发评论以上网友发言只代表其个人观点不代表新浪网的观点或立场。后一篇 游戏名称
http://www.ihoyoo.com/news/66748.html

相关文章:

  • 岳阳网站搭建网站虚拟主机是什么
  • app网站开发的特点爱情表白网站制作
  • 怎么做app和网站购物车郑州平面设计工作室
  • 网站做引流保定建设公司网站
  • 网站建设上机实验心得计算机培训班学费
  • 南昌市建设规费标准网站北京建设主管部门网站
  • 信阳高端网站建设上海网站建设好处
  • dedecms wap网站模板wordpress禁止百度抓取
  • 做推手需要开网站吗设计网站的步骤有哪些
  • 114网站建设wordpress网页加速
  • 南宁网站建设业务员房屋设计装修公司
  • 网站运营推广公司微网站免
  • 建设部标准定额网站长安网站建设公司
  • 合肥网站优化价格河北省建设厅官方网站
  • 贵阳网站建设方案书嘉兴企业网站开发
  • 鹰潭做网站的公司excel表格做网站
  • 免费分站网站网站备案号怎么查询
  • kotlin做网站网站专业设计
  • 网站分析软件专业做网站的技术人员
  • 鄂州手机网站设计vue企业门户网站模板
  • 怎样建设大型网站班级网站 php
  • 做任务的网站源码仪征做网站aicjoy
  • 百度云做网站有优势吗我要装修网
  • 国内做外贸的网站坪山住房及建设局网站
  • 建设网站怎么加购物车设计通网站建设
  • 网站建设tlmhwordpress short ping
  • 公司网站建设需要什么做公益的网站
  • 比稿网站php网站源码删除
  • 网站排名监控工具Wordpress 打开xml rpc
  • 宁波网站制作设计正规代加工项目招商