1.概念

在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。一棵深度为k,且有2^k-1个节点称之为满二叉树;深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应时,称之为完全二叉树。

二叉树在图论中是这样定义的:二叉树是一个连通的无环图,并且每一个顶点的度不大于3。有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。然而,没有足够的信息来区分左结点和右结点。如果不考虑连通性,允许图中有多个连通分量,这样的结构叫做森林。

(1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。

(2)满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。

(3)平衡二叉树——平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

2.代码

//Implementation code for Binary Tree
//功能:按照约定,以前序遍历的方法输入数据,输出数据所在层数//递归依次赋值:
//根结点 - 左结点 - 右结点(前序遍历法)
//左结点 - 根结点 - 右结点(中序遍历法)
//左结点 - 右结点 - 根结点(后序遍历法)#include <stdio.h>
#include <stdlib.h>
//#include <string>
typedef char ElemType;typedef struct BiTNode           //定义二叉树结点
{char data;struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
char string[100];
//创建一颗二叉树,约定用户遵循的前序遍历方式输入数据
void CreateBiTree(BiTree *T)
{char c;scanf("%c", &c);if (' ' == c){*T = NULL;               //递归终止条件}else{*T = (BiTNode*)malloc(sizeof(BiTNode));(*T)->data = c;//递归依次赋值 此处:根结点-左结点-右结点(前序遍历法)CreateBiTree(&(*T)->lchild);CreateBiTree(&(*T)->rchild);}
}void visit(char c, int level)
{printf("%c 位于第 %d 层 \n", c, level);
}
//遍历二叉树
//参数  T  : 要遍历的二叉树
//参数level: 遍历开始的层数
void PreOrderTraverse(BiTree T, int level)
{   if (T)                       //遍历终止条件 NULL{visit(T->data, level);   //递归:根 - 左 - 右PreOrderTraverse(T->lchild, level + 1);PreOrderTraverse(T->rchild, level + 1);}
}
int main()
{int level = 1;BiTree T = NULL;CreateBiTree(&T);PreOrderTraverse(T, level);return 0;
}

3.结果

完全二叉树/ 满二叉树/二叉树遍历(前序、中序、后序、层序遍历)相关推荐

  1. 二叉树的前、中、后、层序遍历整理(Java版本)

    源自快手电商一面 package cn.com.codingce.树.遍历;import cn.com.codingce.树.TreeNode;import java.util.ArrayList; ...

  2. 二叉树的前、中、后序遍历

    所谓二叉树遍历是按某种特定规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次.访问结点所做的操作依赖于具体的应用问题. 遍历是二叉树上最重要的运算之一,也是二叉树进行其它运算的基础. 二 ...

  3. 【数据结构与算法】力扣:二叉树的前、中、后序遍历

    递归法 前序遍历 给你二叉树的根节点 root ,返回它节点值的前序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,2,3] 示例 2: 输入:root = [] 输出 ...

  4. 二叉树的前、中、后序遍历的代码实现(递归方式)

    测试的二叉树的结构 root lfb1 rtb1rtb2 控制台输出的遍历结果 ======从根节点开始,前序遍历此二叉树======= root lfb1 rtb1 rtb2 ======从根节点开 ...

  5. 二叉树遍历方法——前、中、后序遍历(图解)

    目录 一.前序遍历 (1)递归版本 (2)非递归版本 二.中序遍历 (1)递归版本 (2)非递归版本 三.后序遍历 (1)递归版本 (2)非递归版本 四.总结 五.测试程序 六.程序输出 二叉树的遍历 ...

  6. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

  7. 二叉树的前、中、后的非递归遍历

    题目 实现一个链式存储的二叉树,采用非递归的形式,按照前.中.后序的顺序遍历二叉树. 代码 /** * 二叉树的前.中.后序的非递归遍历 **/#include <iostream> us ...

  8. 玩转二叉树 (25 分) 知中序遍历和前序遍历,求做个镜面反转后的层序遍历

    题目: 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格式: 输入第 ...

  9. 二叉树顺序存储-实现前序中序后序遍历

    一.顺序存储二叉树简介 二叉树的存储结构有两种,分别为顺序存储和链式存储. 二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树.只有完全二叉树才可以使用顺序表存储.因此,如果我们想顺序存储普通二叉树 ...

  10. 二叉树题目 ----7 前序中序遍历构造二叉树

    前序中序遍历构造二叉树 思路 在前序中找根结点 根据根结点 + 中序,分成左右两棵子树 根据子树长度,把前序分成左右两颗子树 递归处理子树 /*** Definition for a binary t ...

最新文章

  1. webpack之 loader
  2. dsp处理浮点数_关于IQMATH和浮点数在DSP的深入理解
  3. Javascript操作table,tr,td和表格CSS样式设置小常识
  4. Windows8 64位运行Silverlight程序不能访问WCF的解决方案
  5. 【Unity】12.4 通过网格分层选择行进路线
  6. iOS - block变量捕获原理
  7. 我们分析了成千上万的编程访谈。 这就是我们学到的东西。
  8. Hyper-v下安装第一台Windows Server 2012 R2
  9. Js判断是否在微信浏览器中打开和微信版本号
  10. C#扩展方法奇思妙用高级篇一:改进 Scottgu 的 In 扩展
  11. Python:Python3错误提示TypeError: slice indices must be integers or None or have an __index__ method解决办法
  12. ArcGIS Pro 简明教程(4)工具和模型构建器
  13. 蒙特卡洛树搜索_蒙特卡洛树搜索与Model-free DRL
  14. Java多线程实现-Runnable接口
  15. AR Camera开发记录(三) -- 替换人脸贴图
  16. 前端实习小白日记—1
  17. Pooling反向传播
  18. 常见的几种加密方法和实现
  19. Failed to introspect Class FeignClientFactoryBean 异常排查
  20. 【解决报错原因分析】画图plt.contourf(X,Y,Z)报错TypeError: unhashable type: ‘numpy.ndarray‘(含详细示例讲解)

热门文章

  1. 干净地卸载QTP的小工具 - QTPCleanUninstaller
  2. Java中反射性能测试
  3. [2019杭电多校第四场][hdu6614]AND Minimum Spanning Tree(贪心)
  4. Windows XP Embedded 官方下载地址
  5. java 基础 1 final关键字
  6. Python:generator的send()方法流程分析
  7. SLD 样式 之GeoServer中设计2.5维建筑物
  8. 动态改变 itemRenderer 。
  9. yii 2 中生成自定义模块
  10. Windows下安装和配置NodeJS