建立二叉树:

由于先序、中序、后序遍历的任何一个遍历结果单独都不能唯一确定一颗二叉树,因此不能直接使用其中任何一个遍历结果来构造二叉树(原因是不能确定左右子树的大小(节点数),或者说不知道子树的结束位置)

虽然先序、中序、后序遍历任意两种遍历结果相结合都可以唯一确定一颗二叉树,但是很不方便。

所以:只要输入为‘#’就表示该树为空,称为扩展二叉树             例输入:ABD##E##C#F##

二叉链表存储:

struct node
{char data;struct node *L_tree;struct node *R_tree;
};

struct node *creat_tree()//建立二叉树
{char ch;ch = getchar();struct node *Tree;Tree = (struct node *)malloc(sizeof(struct node));if(ch == '#')Tree = NULL;else{Tree->data   = ch;//输入本节点信息Tree->L_tree = creat_tree();//建左子树Tree->R_tree = creat_tree();}return Tree;
}

递归先序遍历:

void preorder_first(struct node *tree)//先序遍历
{if(tree != NULL){cout << tree->data << " ";preorder_first(tree->L_tree);preorder_first(tree->R_tree);}
}

递归中序遍历:

void preorder_second(struct node *tree)//中序遍历
{if(tree != NULL){preorder_second(tree->L_tree);cout << tree->data << " ";preorder_second(tree->R_tree);}
}

递归后序遍历:

void preorder_third(struct node *tree)//后序遍历
{if(tree != NULL){preorder_third(tree->L_tree);preorder_third(tree->R_tree);cout << tree->data << " ";}
}

求树的深度:tree=NULL 时高度为0。不为空时当前tree高度是其左右子树高度的最大值+1,左右子树也是二叉树,规模变小求解一样用递归

int high(struct node *tree)//数的深度
{if(tree == NULL)return 0;elsereturn (max(high(tree->L_tree),high(tree->R_tree))+1);
}

求树中节点数:

void nodecount(struct node *tree)//节点个数
{if(tree != NULL){n++;//先序遍历计数nodecount(tree->L_tree);//n++;//中序遍历计数nodecount(tree->R_tree);//n++;//后序遍历计数}
}

 求树中叶节点数:

void ye_node(struct node *tree)//叶节点的个数
{if(tree != NULL){if(tree->L_tree == NULL && tree->R_tree == NULL){n1++;}ye_node(tree->L_tree);ye_node(tree->R_tree);}
}

 求树中度为 2 的节点个数:

void have_two_node(struct node *tree)//度为2的节点的个数
{if(tree != NULL){if(tree->L_tree != NULL && tree->R_tree != NULL){n2++;}have_two_node(tree->L_tree);have_two_node(tree->R_tree);}
}

  

转载于:https://www.cnblogs.com/ldy-miss/p/6044443.html

建立、遍历二叉树(二叉链表)相关推荐

  1. 理论基础 —— 二叉树 —— 二叉链表

    [二叉链表] 二叉树一般采用二叉链表存储,其基本思想是:令二叉树的每个结点对应一个链表结点,链表结点除了存放与二叉树结点有关的数据信息外,还要设置指示左右孩子的指针. template<clas ...

  2. C#实现二叉树--二叉链表结构

    二叉树的简单介绍 关于二叉树的介绍请看这里 : 二叉树的简单介绍 http://www.cnblogs.com/JiYF/p/7048785.html 二叉链表存储结构: 二叉树的链式存储结构是指,用 ...

  3. 数据结构C++边学边做--二叉树的实现(二叉链表实现遍历操作)

    二叉树的实现(二叉链表实现遍历操作) 一.二叉树的遍历 二.二叉链表的数据结构定义 三.二叉链表类实现 1.类声明 2.BiTree->构造函数:Create创建二叉链表 3.~BiTree-& ...

  4. 6-2-二叉树(二叉链表存储)-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版...

    课本源码部分 第6章  树和二叉树 - 二叉树(二叉链表存储) --<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴 ...

  5. C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)

    今天写的是二叉树操作的实验,这个实验有三个部分: ①建立二叉树,采用二叉链表结构 ②先序.中序.后续遍历二叉树,输出节点值 ③销毁二叉树 二叉树的节点结构定义 typedef struct BiTNo ...

  6. 3004基于二叉链表的二叉树的双序遍历(附题意解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...

  7. 3008基于二叉链表的二叉树的遍历(附可能的WA解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别实现二叉树的先序.中序和后序遍历. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时 ...

  8. 数据结构-二叉链表存储的二叉树(利用先序遍历)

    树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用.对于每一个结点至多只有两课子树的一类树,称其为二叉树.二叉树的链式存储结构是一类重要的数据结构,其形式定义如下: 而二叉树的前序.中序遍历 ...

  9. 数据结构知识整理 - 建立二叉链表、复制二叉树、计算二叉树深度、统计二叉树结点数

    主要内容 建立二叉链表 复制二叉树 计算二叉树深度 统计二叉树的结点个数 建立二叉链表 在先序遍历的递归算法中,将输出语句改为输入语句即可.(可回顾"递归算法") 需要注意的是,递 ...

最新文章

  1. 线程同步工具(七)在并发任务间交换数据
  2. 2012 winter training @HIT Day 2 解题报告
  3. qc成果报告范例_质量引领创新 扬子江勇夺医药行业QC“十五连冠”
  4. 一个高质量的程序应具备哪些条件?_有料!报考云南省考公务员,应具备哪些条件?...
  5. 【Linux】Linux Systemd 启动守护进程
  6. 关于 “Makefile:3:***遗漏分隔符。停止 。”解决方法二
  7. 关于eclipse新建web项目,提示:The superclass javax.servlet.http.HttpServlet was not found on the Java解决办法...
  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:在元素获取焦点时显示(如:键盘操作的用户)...
  9. Web—09-正则表达式
  10. JDBC数据库通用DAO
  11. JSPstudy恢复80端口
  12. 如何通俗易懂的解释什么是云服务器?
  13. 【无标题】Vue长列表性能优化常用方案
  14. CS5213芯片|HDMI to VGA转换头芯片资料分享
  15. 新农慕课python小测验答案_python面向对象程序设计_章节测验,期末考试,慕课答案查询公众号...
  16. 基于ArcGIS水文分析、HEC-RAS模拟技术在洪水危险性及风险评估
  17. 验证码识别dll库,识别率95%
  18. 单线程+多路IO复用 Redis6多线程
  19. 新浪微博开放平台账号申请(基于dcloud开发)
  20. 阿里云的PLOARDB

热门文章

  1. Java使用Redis
  2. 算法学习之路|最小生成树——prime算法
  3. Android Studio 常用快捷键 for mac
  4. 《C程序猿:从校园到职场》出版预告(4):从“散兵游勇”到“正规部队”
  5. 如何把电压这个浮点值转字符串输出到串口
  6. 生产库中遇到mysql的子查询
  7. 运算符的优先级和结合性
  8. awk嵌套awk_与AWK一起喝咖啡
  9. 开放式式商业模式_什么是开放式领导?
  10. 开源 区块链_区块链如何补充开源