二叉树的基本运算如下(显示的结果):
(1)创建二叉树
(2)输出二叉树:A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)) (3)H 结点:左孩子为 J 右孩子为 K
(4)二叉树 bt 的高度:7
(5)释放二叉树 bt

如何输出带括号二叉树?
这里用的是根结点和其他结点递归函数分离的方式完成的,
即在pre_order_traveral_brackets()中运行遍历根结点及其左右孩子,然后在pre_order_traveral_brackets1()遍历其他子结点

完整代码如下

#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;elsereturn 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("释放二叉树成功");
}

转载于:https://www.cnblogs.com/vivid-victory/p/10090457.html

树和二叉树2——输出广义表形式(带括号)二叉树相关推荐

  1. 广义表深度(括号匹配)

    /** bit2014_3  2018-8-15 16:28  求广义表的深度,  (c,((d,e),f),h)    (c,((d,(a,b),e),f),(h,h),h) 输出 3 思路:本题我 ...

  2. 输入广义表建立双亲表示的树and给定双亲表示的树输出广义表表示的树

    注释写的很详细了,就直接上代码吧. #include<iostream> #include<string> #include<stack> #include< ...

  3. 数据结构-----凹入表形式横向打印二叉树结构 (附代码+注释)

    数据结构的学习中最最基本的实验之--打印二叉树结构 代码生成效果如下: (一)需求分析 1.打印二叉树的程序中,输入数据的类型限定为字符型,并且以"回车符"为结束标志.用户默认以中 ...

  4. 分层次的非线性结构——树(广义表)05

    包含子结构的线性结构,线性表的推广--广义表 广义表的定义 广义表定义 约定:为了区分原子和子表,书写时用大写字母表示子表,用小写字母表示原子. 广义表特性 广义表表示方法 用圆圈和方框分别表示表和单 ...

  5. c语言数据结构大作业,数据结构大作业——树(和广义表)

    数据结构大作业--树(和广义表) 以广义表形式输入一棵树,然后以合适的比例将这棵树展示出来 (如何构造一个广义表已经略去) 对于广义表化的树,我们采用的树节点类似二叉链表形式的存储. 首先设计结点内容 ...

  6. 广义表之树的兄弟孩子表示法

    title: 广义表之树的兄弟孩子表示法 date: 2020-11-17 15:55:55 tags: 兄弟孩子广义表 二叉树 categories: 数据结构 用兄弟孩子广义表来表示二叉树 对比 ...

  7. C#数据结构-广义表和递归

    广义表是线性表的推广.定义是:一个广义表是n个元素的一个有限序列.差不多就是线性表元素里面还有线性表,这个表里面的元素称为原子,如果这个原子也是线性表称之为子表.表示为:GL=(a1,a2,a3... ...

  8. 【数据结构】CH6 数组和广义表

    目录 前言 一.数组 1.数组的基本概念 (1)定义 (2)性质 (3)d维数组的抽象数据类型 (4)[例6.1] 2.数组的存储结构 (1)一维数组的存储结构 (2)二维数组的存储结构 (3)三维数 ...

  9. 广义表的非递归深度优先遍历及相关运算的c++实现

    对广义表的链表表示的深度优先遍历的实现要点是,从广义表的附加头节点开始向后顺序访问,对原子节点,访问结束后递进至下一节点,每遇到子表的附加头节点就进入该子表所在的下一层继续向下遍历,在下一层的子表中同 ...

最新文章

  1. Back Propagation Nerual Networks
  2. 李超线段树(Li-Chao Segment Tree)
  3. Android规范文档
  4. Word2016如何取消宏已被禁用的提示
  5. 什么是document对象?如何获取文档对象上的元素?_javascript自学记录:Document类型...
  6. find 和 DOM遍历孰快孰慢~
  7. 内网穿透工具ngrok的使用
  8. Swagger在header中添加token
  9. windows查找端口占用并杀死端口进程
  10. 潜伏研发群一个月,我发现了程序员不为人知的秘密!这也太可爱了吧
  11. javascript事件之:谈谈自定义事件
  12. OpenBSD 清理 OpenSSL 代码 一周递交数百补丁
  13. matlab在电磁波中的应用,MATLAB在电磁波与电磁场课程教学中的应用
  14. STAMP可以用在win10上面吗
  15. dsolve函数的功能_MATLAB 求解常微分方程的函数是dsolve()。
  16. C++:实现量化存在净额结算协议的交易对手风险下的利率互换估值公式测试实例
  17. 超声波传感器(CHx01) 学习笔记 Ⅲ - I2C读写操作
  18. ubuntu搭建php运行环境
  19. MinGW介绍与使用
  20. 牛牛手中有三根木棍,长度分别是a,b,c。牛牛可以把任一一根木棍长度削短,牛牛的目标是让这三根木棍构成一个三角形,并且牛牛还希望这个三角形的周长越大越好。

热门文章

  1. mysql的建表语句
  2. yafu安装使用方法以及mismatched parens解决方法
  3. Deep Residual Network
  4. 变形二叉树中节点的最大距离(树的最长路径)——非递归解法
  5. apk反编译、smali修改、回编译笔记
  6. 如何设计一个优秀基表结构
  7. 【操作系统】—进程的状态与转换
  8. CSS基本知识—浮动
  9. Intellij IDLE 中javafx使用与配置
  10. 比特币矿池是什么意思