二叉树的基本操作

  • 创建二叉树
  • 二叉树的叶子节点
  • 二叉树的节点总数
  • 二叉树的高度

二叉树的基本遍历方法

创建二叉树

代码:

// 创建二叉树,使用#
void createBiTree(BiTree& T) { //引用是为了连根节点也更改了char ch;scanf_s("%c", &ch,1);if (ch == '#')  // #代表虚拟节点T = NULL; //节点直接置为空else {T = (BiTNode*)malloc(sizeof(BiTNode));T->data = ch ;createBiTree(T->left);createBiTree(T->right);}
}

二叉树的叶子节点

递归模型:
f(b)={0b==NULL1b−>left==NULL且b−>right=NULLf(b−>left)+f(b−>right)其余情况f(b) = \begin{cases} 0 & b == NULL \\ 1 & b->left ==NULL且 b->right = NULL \\ f(b->left)+f(b->right) & 其余情况\\ \end{cases} f(b)=⎩⎪⎨⎪⎧​01f(b−>left)+f(b−>right)​b==NULLb−>left==NULL且b−>right=NULL其余情况​

分析:

当二叉树为空时,叶子结点数为0;当只有一个根节点时,叶子结点数为1;其余情况,叶子节点数 = 左子树叶子节点数 + 右子树叶子节点数

代码:

/*计算一颗二叉树中叶子节点的数量*/
int countleaf(BiTree T) {if (T == NULL)return 0;else if (T->left == NULL && T->right == NULL)return 1;elsereturn countleaf(T->left) + countleaf(T->right);
}

二叉树的节点总数

递归模型:
f(b)={0b==NULL1b−>left==NULL且b−>right=NULLf(b−>left)+f(b−>right)+1其余情况f(b) = \begin{cases} 0 & b == NULL \\ 1 & b->left ==NULL且 b->right = NULL \\ f(b->left)+f(b->right) + 1 & 其余情况\\ \end{cases} f(b)=⎩⎪⎨⎪⎧​01f(b−>left)+f(b−>right)+1​b==NULLb−>left==NULL且b−>right=NULL其余情况​
分析

当二叉树为空时,结点数为0;当只有一个根节点时,结点数为1;其余情况,节点总数 = 左子节点总数 + 右子树节点总数+1

代码:

/*计算二叉树的节点个数*/
int NodeCount(BiTree T) {int num1, num2;if (!T)return 0;else if (!T->left && !T->right)return 1;else {/*num1 = NodeCount(T->left);num2 = NodeCount(T->right);return (num1 + num2 + 1);*/return (NodeCount(T->left) + NodeCount(T->right) + 1);}
}

二叉树的高度

分析

当二叉树为空时,T的深度为0;如果二叉树不为空,则分别计算其左、右子树深度,左右子树的最大深度加1就是该二叉树的深度
代码:

/*计算二叉树的深度*/
int hight(BiTree T) {int n1, n2;if (!T)return 0;else {n1 = hight(T->left);n2 = hight(T->right);return (n1 >= n2 ? n1 : n2) +1; //左右子树最大值加1}
}

二叉树的基本操作(c语言)相关推荐

  1. 树的基本操作代码 c语言,二叉树的基本操作(C语言、源代码)

    二叉树的基本操作(源代码) #include "stdio.h" #include "malloc.h" #define MAX 100 typedef str ...

  2. 数据结构实验报告,二叉树的基本操作(C语言)

    数据结构实验报告,二叉树的基本操作(C语言) 作者:命运之光 专栏:数据结构 目录 数据结构实验报告,二叉树的基本操作(C语言) 实验六 二叉树的基本操作 一.需求分析 二.概要设计 三.详细设计 四 ...

  3. C语言二叉树的基本操作(超全)

    二叉树作为数据结构其实是一个挺有意思的结构,可以有多种应用 我们直接来看一下二叉树的代码: #include<stdlib.h> #include<stdio.h> #incl ...

  4. 实现二叉树的基本操作(Java版)

    近期研究了一下二叉树,试着用Java语言实现了二叉树的基本操作,下面分享一下实现代码: package com.sf.test;import java.util.ArrayDeque; import ...

  5. 【数据结构】二叉树的构建(C语言实现)

    1.树概念及结构 1.1树的概念 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合.把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的. ...

  6. 二叉树的基本操作之二叉排序树

    //二叉树的基本操作之-建立二叉排序树并遍历 #include<stdio.h> #include<string.h> struct Node{Node *lchild;Nod ...

  7. 二叉树的基本操作及哈夫曼编码/译码系统的实现

    二叉树的基本操作及哈夫曼编码/译码系统的实现 实验目的和要求 掌握二叉树的二叉链表存储表示及遍历操作实现方法. 实现二叉树遍历运算的应用:求二叉树中叶结点个数.结点总数.二叉树的高度,交换二叉树的左右 ...

  8. 手写二叉树的基本操作

    本题题目来源是: https://pta.patest.cn/pta/test/1342/exam/3/question/20490 老实说,写二叉树的基本操作写的我心慌意乱,主要原因是总感觉递归学的 ...

  9. 二叉树的基本操作——数据结构实验报告

    一.实验名称:二叉树 二.实验目的 1)熟练掌握二叉树的存储方式的具体实现过程,实现二叉树的基本操作及运算: 2)进一步巩固指针的用法,栈及队列的基本操作,进一步体会递归算法,学会综合应用. 三.实验 ...

最新文章

  1. pickle,json ;random,shelve
  2. linux打包文件命令行,Linux 命令行 | 打包和解包命令
  3. LeetCode1. 两数之和
  4. 【产品动态】解读Dataphin流批一体的实时研发
  5. win10虚拟网络服务器,win10 虚拟专用网络服务器配置
  6. phpcmsV9 自定义分页函数与调用 - 不影响后台SQL分页
  7. 微课|中学生可以这样学Python(2.3.4节):例2-1
  8. 哪款浏览器好用_超级实用!让你效率倍增的6款浏览器插件
  9. 7.11 其他面向对象设计原则2:能用组合的地方,不要用继承
  10. 线程--线程池--委托--task---async/await
  11. 有哪些计算机法人快捷键,tras企业版操作说明.doc-广东省国家税务局.doc
  12. android ios mp4格式转换,ios格式转换器|iphone视频格式转换器免费版 7.1 - 系统天堂...
  13. one world,one dream
  14. 以word转PDF为例,免费的文档格式转换方法分享
  15. 倾斜摄影三维实景模型为智慧城市提供全流程可视化支撑
  16. python外国网站爬虫_Python3网络爬虫(一):利用urllib进行简单的网页抓取
  17. redis cluster C 客户端
  18. 【子桓说】从阿里、百度分析,教你判断一家企业是否适合自己
  19. c罗图片带字经典语言,c罗足球名言短句 c罗的那些霸气名言
  20. 谷歌将正式推出 Fuchsia OS,已有适配设备

热门文章

  1. 局域网延时大怎么办?
  2. 天眼FAST如何发现脉冲星?
  3. 【中级软考】RSA、IDEA、RC4、MD5算法分别是什么?
  4. Git中pull,commit和push的概念
  5. java 好用的工具类
  6. 第十一届蓝桥杯大赛软件赛省赛 C/C++ 大学B组
  7. PAT甲级题目翻译+答案 AcWing(并查集)
  8. 将zookeeper、Tomcat、redis部署成windos服务
  9. linux sql server硬件要求,SQL Server On Linux(20)—— SQL Server On Linux性能(6)——针对性能的配置(Linux层面)...
  10. apache dubbo 自定义全局统一的异常处理器