7-2 孩子兄弟链存储结构下树的基本运算算法和求树t的高度
2018-03-06 23:29
274 查看
//孩子兄弟链存储结构下树的基本运算算法和求树t的高度 #include <stdio.h> #include <malloc.h> #define MaxSize 100 typedef struct tnode { char data; //节点的值 struct tnode *hp; //指向兄弟 struct tnode *vp; //指向孩子节点 } TSBNode; //孩子兄弟链存储结构类型 TSBNode *CreateTree(char *str) //由str建立孩子兄弟链存储结构 { struct { TSBNode *nodep; //节点指针 int num; //孩子个数 } St[MaxSize]; //顺序栈 int top=-1; //栈顶指针 int i=0,j; char ch=str[i]; TSBNode *t=NULL,*p,*q; while (ch!='\0') { switch(ch) { case '(': top++; St[top].nodep=p; St[top].num=0; //当前节点p进栈 break; case ')':top--; break; //退栈 case ',':St[top].num++; break; //栈顶节点增加一个孩子 default: p=(TSBNode *)malloc(sizeof(TSBNode)); p->data=ch; //建立一个节点p存放ch p->hp=p->vp=NULL; if (t==NULL) //原为空树 t=p; else //将其作为栈顶节点的一个孩子 { if (St[top].num==0) //第一个孩子用vp指向它 St[top].nodep->vp=p; else //其他孩子用栈顶节点的孩子节点的hp指向它 { q=St[top].nodep->vp; for (j=1;j<St[top].num;j++) q=q->hp; q->hp=p; } } break; } i++; ch=str[i]; } return t; } void DispTree(TSBNode *t) //输出孩子兄弟链存储结构 { TSBNode *p; if (t!=NULL) { printf("%c",t->data); if (t->vp!=NULL) //有孩子时输出一个'(' { printf("("); p=t->vp; //p指向节点t的第一个孩子 while (p!=NULL) { DispTree(p); p=p->hp; if (p!=NULL) printf(","); } printf(")"); //输出一个')' } } } void DestroryTree(TSBNode *&t) //销毁树t { if (t!=NULL) { DestroryTree(t->vp); DestroryTree(t->hp); free(t); //释放根节点 } } int TreeHeight2(TSBNode *t) { TSBNode *p; int h,maxh=0; if (t==NULL) return 0; //空树返回0 else { p=t->vp; //指向第1个孩子节点 while (p!=NULL) //扫描t的所有子树 { h=TreeHeight2(p); //求出p子树的高度 if (maxh<h) maxh=h; //求所有子树的最大高度 p=p->hp; //继续处理t的其他子树 } return(maxh+1); //返回maxh+1 } } int main() { TSBNode *t; t=CreateTree("A(B,C(E,F,G),D)"); printf("t:"); DispTree(t); printf("\n树t的高度:%d\n",TreeHeight2(t)); DestroryTree(t); return 1; }
相关文章推荐
- 7-1 孩子链存储结构下树的基本运算算法和求树t的高度
- 数据结构之自建算法库——二叉树的链式存储及基本运算
- 数据结构以孩子兄弟链存储的树的高度
- 数据结构之自建算法库——二叉树的链式存储及基本运算
- 二元多项式基本运算 选择合适的存储结构表示二元多项式,并实现基本的加减运算 要求: 1)二元多项式的输入采用如下方式进行键盘输入 (5y^2+7)x^4 + (3y^4+2y+9)x^2 + (2y
- 第六周:栈的链式存储结构及其基本运算实现
- 第九周项目实践1 二叉树的链式存储及基本运算 算法库
- 数据结构--数组和广义表--以行逻辑链接的顺序表为存储结构的矩阵的基本运算(求矩阵乘积)
- 实验四:图的基本存储结构及图的遍历运算
- 第十周--项目1算法库建立-二叉树的链式存储及基本运算
- 第九周项目1之自建算法库——二叉树的链式存储及基本运算
- 数据结构实践——对称矩阵的压缩存储及基本运算
- 实现环形队列各种基本运算的算法(用顺序结构)
- 栈的链式存储结构及其基本运算的实现
- 线性表的基本操作:插入、删除、查找等操作在顺序存储结构和链接存储结构上的算法
- 第九周:广义表的存储结构及基本运算
- 1、数据结构的基本逻辑结构、存储结构和运算
- 栈的链式存储结构及其基本运算实现
- 栈的链式存储结构及其基本运算的实现
- bo2-7.cpp 多项式(存储结构由c2-6.h定义)的基本操作及算法