erchashu.rar

  • miui132
    了解作者
  • Visual C++
    开发工具
  • 1KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2009-05-27 13:59
    上传日期
对于二叉树的基本的运算,查找孩子结点,查看叶子节点到根节点的路径~ 二叉树的宽度。
erchashu.rar
  • 7.1.cpp
    3.8KB
内容介绍
#include<iostream.h> #include<stdio.h> #include<malloc.h> //#include<string.h> typedef char elemtype; #define Maxsize 50 //#include"btree.h" typedef struct node { elemtype data; struct node *lchild; struct node *rchild; }Btnode; void createBtnode(Btnode *&b,char *str) { Btnode *st[Maxsize]; Btnode *p=NULL; int top=-1,k,j=0; char ch; b=NULL; ch=str[j]; while (ch!='\0') { switch(ch) { case '(':top++;st[top]=p;k=1;break; case ')':top--;break; case ',':k=2;break; default : p=(Btnode *)malloc(sizeof(Btnode)); p->data=ch;p->lchild=p->rchild=NULL; if(b==NULL) b=p; else { switch(k) { case 1:st[top]->lchild=p;break; case 2:st[top]->rchild=p;break; } } } j++; ch=str[j]; } } Btnode *findnode(Btnode *b,elemtype x) { Btnode *p; if(b==NULL) return NULL; else if (b->data==x) return b; else { p=findnode(b->lchild,x); if(p!=NULL) return p; else return findnode(b->rchild,x); } } Btnode *lchildnode(Btnode *p) { return p->lchild; } Btnode *rchildnode(Btnode *p) { return p->rchild; } void child(Btnode *p) { //Btnode *n; if(p!=NULL) { if(p->lchild==NULL && p->rchild==NULL) cout<<p->data; child(p->lchild); child(p->rchild); } } int Btnodeheight(Btnode *b) { int lchildh,rchildh; if(b==NULL) return(0); else { lchildh=Btnodeheight(b->lchild); rchildh=Btnodeheight(b->rchild); return (lchildh>rchildh)? (lchildh+1):(rchildh+1); } } void dispbtnode(Btnode *b) { if (b!=NULL) { printf("%c",b->data); if (b->lchild!=NULL||b->rchild!=NULL) { printf("("); dispbtnode(b->lchild); if(b->rchild!=NULL) printf(","); dispbtnode(b->rchild); printf(")"); } } } void preorder(Btnode *b) { if (b!=NULL) { printf("%c",b->data); preorder(b->lchild); preorder(b->rchild); } } void inorder(Btnode *b) { if (b!=NULL) { inorder(b->lchild); printf("%c",b->data); inorder(b->rchild); } } void postorder(Btnode *b) { if (b!=NULL) { postorder(b->lchild); postorder(b->rchild); printf("%c",b->data); } } void Allpath(Btnode *b) { Btnode *st[50]; Btnode *p; int flag,i,top=-1; if(b!=NULL) { do { while(b!=NULL) { top++; st[top]=b; b=b->lchild; } p=NULL; flag=1; while(top!=-1 && flag) { b=st[top]; if(b->rchild==p) { if(b->lchild==NULL && b->rchild==NULL) { for(i=top;i>0;i--) printf("%c->",st[i]->data); printf("%c\n",st[0]->data);} top--; p=b; } else { b=b->rchild; flag=0; } } }while(top!=-1); cout<<endl; } } int f(Btnode *b) { if(b==NULL) return 0; else return(f(b->lchild)+f(b->rchild)+1); } void main() { char X; Btnode *b,*a1,*a2; //Btnode *p; //char str[20]="A(B(D(G)),C(E,F))"; //cout<<"原来的树:"<<endl<<"A(B(D(G)),C(E,F))"<<endl; cout<<"新建立的树:"<<endl; createBtnode(b,"A(B(D,E(H(J,K(L,M(N))))),C(F,G(I))"); dispbtnode(b); cout<<endl<<"树的高度:"<<Btnodeheight(b)<<endl; cout<<"先根遍历:"<<endl; preorder(b);cout<<endl; cout<<"中根遍历:"<<endl; inorder(b);cout<<endl; cout<<"后根遍历:"<<endl; postorder(b);cout<<endl; cout<<"所有结点的个数:"<<f(b)<<endl; cout<<"所有的叶子结点:";child(b);cout<<endl; char a; cout<<"是否查找结点?(y/n)"; cin>>a; while(a!='n') { cout<<"请输入你要查找的结点:"; cin>>X; a1=lchildnode(findnode(b,X)),a2=rchildnode(findnode(b,X)); if(a1!=NULL) cout<<"左孩子结点:"<<a1- rel='nofollow' onclick='return false;'>data<<endl; else cout<<"没有左孩子结点"<<endl; if(a2!=NULL) cout<<"右孩子结点:"<<a2- rel='nofollow' onclick='return false;'>data<<endl; else cout<<"没有左孩子结点"<<endl; } Allpath(b); return; }
评论
    相关推荐
    • 4、二叉树的应用.zip
      在计算机科学中,二叉树是每个节点最多有两个子树的树结构。本程序能够实现二叉树的创建、先序、中序、后序、层次遍历、计算高度等功能。
    • 二叉树的高度和宽度.zip
      二叉树的高度及宽度采用递归算法和非递归算法
    • 8.2.zip
      利用二叉树层次遍历求二叉树宽度二叉树宽度二叉树同层结点数的最大值)
    • 数据结构二叉树算法实现
      以凹进方式输出二叉树 C语言实现双向链表之具体实现 二叉树宽度计算 二叉树的四种遍历方式 二叉树的所有叶子结点到根结点的路径 二叉的创建
    • whiteboarding-with-erik:每周进行白板练习中的问题
      每周白板练习问题 来自SEI 29的Erik 文章链接 :down_arrow: 第0周: 第一周: 第2周: 第三周 第4周: 第5周: 第六周: 第7周: 第8周: ...第15周: 二叉树 ...第20周: 二叉树II(宽度优先搜索)
    • 二叉树、线索二叉树类模版(C++)
      二叉树模版:包括先序中序构造,后序中序构造,结点的度,统计度为n的结点个数,高度,宽度,结点的最大值,交换每个结点的左右,删除叶结点,是否完全二叉树,广度优先遍历,先序遍历,中序遍历,后序遍历;...
    • 二叉树的所有编程算法
      二叉树的建立,遍历算法(递归与非递归,基于对列或堆栈)统计二叉树中叶子结点的个数,统计二叉树中结点的总数,求二叉树的深度(后序遍历),求二叉树宽度(具有结点数最多的层上的结点数,已知二叉树中序遍历和...
    • mfc c++ 二叉树图形界面 遍历
      这是二叉树图形界面的所有文档和代码的打包 代码讲解都很细 一看就懂 二叉树的基本所有知识都在里面包含了 如各种遍历 宽度等。
    • C++数据结构-二叉树和线索二叉树
      基于二叉链表的二叉树,实现了二叉树的多种操作:添加、删除、拷贝、清空、树深度计算、父节点、兄弟节点获取、先中后序递归及非遍历、按层次遍历、中序迭代器(非递归算法)、节点查找、先序和中序序列重建二叉树、...
    • 二叉树的图形演示 C语言
      二叉树的创建销毁等操作,图形演示,形象直观,方便理解