数据结构 5.28
Posted mingye
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构 5.28相关的知识,希望对你有一定的参考价值。
#include <stdio.h> #include <stdlib.h> typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; int init(BiTree &t)//存在的意义并不大 { t=NULL; return 1; } int BiTreedestroy(BiTree &t) { if(t) { if(t->lchild) BiTreedestroy(t->lchild); if(t->rchild) BiTreedestroy(t->rchild); free(t); t=NULL; } return 1; } void BiTreecreate(BiTree &t) { char ch; char pch[]="ABD$$EHJ$$KL$$M$N$$$CF$$G$I$$"; static int i=0; ch=pch[i++]; if(ch==‘$‘) t=NULL; else { t=(BiTree)malloc(sizeof(BiTNode)); if(!t) exit(-1); t->data=ch; BiTreecreate(t->lchild); BiTreecreate(t->rchild); } } void pre_order_traveral(BiTree t) { if(t) { printf("%c ",t->data); pre_order_traveral(t->lchild); pre_order_traveral(t->rchild); } } int flag=1; void pre_order_traveral_brackets1(BiTree t) { //A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I))) if(t) { printf("%c",t->data); if(t->lchild||t->rchild) { printf("(");flag++; } pre_order_traveral_brackets1(t->lchild); if(t->rchild) //if(t->lchild||t->rchild)这个用来判断的是有(A,)的情况 //输出案例没有关于“有左子树没右子树的”显示需求,故不用,但用这条语句会更合理些 printf(","); pre_order_traveral_brackets1(t->rchild); } } void pre_order_traveral_brackets(BiTree t) { //A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I))) if(t) { printf("%c",t->data); //if(t->lchild||t->rchild) printf("("); pre_order_traveral_brackets1(t->lchild); while(--flag) { printf(")"); } //if(t->lchild) printf(","); pre_order_traveral_brackets1(t->rchild); while(flag--+1) { printf(")"); } } } int max(int a,int b) { return a>b?a:b; } int BiTreedeep(BiTree t) { if(t==NULL) return 0; else { if(t->lchild==NULL&&t->rchild==NULL) return 1; else return 1+max(BiTreedeep(t->lchild),BiTreedeep(t->rchild)); } } int main(){ BiTree binarytree; if(init(binarytree)) printf("创建二叉树成功!\n"); BiTreecreate(binarytree); printf("输出二叉树:"); pre_order_traveral_brackets(binarytree); printf("\n二叉树 bt 的高度: %d\n",BiTreedeep(binarytree)); if(BiTreedestroy(binarytree)) printf("释放二叉树成功!"); }
以上是关于数据结构 5.28的主要内容,如果未能解决你的问题,请参考以下文章