树与二叉树(一)

定义

树是n(n≥0)个结点的有限集,它或为空树(n=0),或为非空树

非空树T满足以下条件:

(1) 有且仅有一个称为根的结点;

(2)除根结点以外的其余结点可分为m(m>0)个互补相交的有限集T1,T2,…Tm,其中每一个集合本身又是一棵树,并且称为根的子树。

                         空树

                       一般的树

基本术语

根———即根结点(没有前驱)

叶子———即终端结点(没有后继)

森林———指m棵不相交的树的集合

有序树———结点各子树从左至右有序,不能互换

无序树———结点各子树可互换位置。

双亲———即上层的那个结点(直接前驱)

孩子———即下层结点的子树的根(直接后继)

兄弟———同一双亲下的同层结点(孩子之间互称为兄弟)

堂兄弟———即双亲位于同一层的结点(但并非同一双亲)

祖先———即从根到该结点所经分支的所有结点

子孙———即该结点下层子树种的任一结点

结点———即树的数据元素

结点的度———结点挂接的子树数

结点的层次———从根到该结点的层数(根结点算第一层)

终端结点———即度为0的结点,即叶子

分支结点———即度不为0的结点(也称为内部结点)

树的度———所有结点度中的最大值

树的深度———指所有结点中最大的层数(或高度)


二叉树

二叉树是一种特殊的树结构,普通树若不转化成二叉树,则运算很难实现

为什么要重点研究二叉树呢?

  • 二叉树的结构最简单,规律性最强
  • 所有的树都能转为唯一对应的二叉树,不失一般性。

定义:

每个节点至多有两个子树。

基本特点:

  • 结点的度小于等于2
  • 有序树(子树有序,不能颠倒)
                         二叉树的五种形态
    

二叉树的性质

性质1 : 一棵非空二叉树的第i层上最多有2^i-1个结点(i≥1)。

性质2 :若规定空树的深度为0,则深度为k的二叉树最多有(2^k)-1个结点

(k≥0)。

性质3: 具有n个结点的完全二叉树的深度k为log2n+1。

性质4 :对于一棵非空二叉树,如果度为0的结点数目为n0,度为2的结点数目为n2,则有n0= n2+1。

性质5 :对于具有n个结点的完全二叉树,如果按照从上到下和从左到右的顺序对所有结点从1开始编号,则对于序号为i的结点,有:

  1. 如果i>1,则序号为i的结点的双亲结点的序号为i/2(“/”表示整除);如果i=1,则该结点是根结点,无双亲结点。
  2. 如果2i≤n,则该结点的左孩子结点的序号为2i;若2i>n,则该结点无左孩子。
  3. 如果2i+1≤n,则该结点的右孩子结点的序号为2i+1;若2i+1>n,则该结点无右孩子。

满二叉树:一棵深度为k且有2k-1个结点的二叉树。(意思是树上挂满了结点)

完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应(意思是只有最后一层叶子不满,且全部集中在左边)

                    Unfinished, see the next
时间: 2024-10-26 23:35:02

树与二叉树(一)的相关文章

数据结构教程 第二十一课 树、二叉树定义及术语

教学目的: 掌握树.二叉树的基本概念和术语,二叉树的性质 教学重点: 二叉树的定义.二叉树的性质 教学难点: 二叉树的性质 授课内容: 一.树的定义: 树是n(n>=0)个结点的有限集.在任意一棵非空树中: (1)有且仅有一个特定的称为根的结点: (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,...Tm,其中每一个集合本身又是一棵树,并且称为根的子树. 二.树的基本概念: 树的结点包含一个数据元素及若干指向其子树的分支. 结点拥有的子树数称为结点的度. 度为0

森林、树与二叉树相互转换

1.森林转二叉树      (1).把每棵树转换为二叉树      (2).第一棵二叉树不动,从第二棵二叉树开始,一次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来. 转换规则:兄弟相连,长兄为父,孩子靠左.       2.树转二叉树      (1).加线.在所有的兄弟结点之间加一条线.      (2).去线.树中的每个结点,只保留它与第一个孩子结点的连线,删除其他孩子结点之间的连线.      (3).调整.以树的根结点为轴心,将整个树调节一下(第一个孩子是结点的左

C++中的树、二叉树、二叉树遍历、二叉树前序、中序、后序遍历相互求法

本博文来总结下树.二叉树以及二叉树前序.中序.后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,比较笨的方法是画出来二叉树,然后根据各种遍历不同的特性来求,也可以编程求出,下面我们分别说明. 1.什么是树?什么是二叉树? 树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合. 二叉树是指结点的度不超过2的有序树. (结点的度:树中的一个结点拥有的子树数目.) 2.二叉树的前序.中序.后序遍历的特性  二叉树前序遍历特性:   (1).访问根节点  (2).前序遍

数据结构实践项目——树和二叉树(1)

本文针对[数据结构基础系列(6):树和二叉树]第1-6, 8-10课时 1 树结构导学 2 树的基本概念 3 树的基本术语 4 树的性质 5 树的存储结构 6 二叉树概念和性质 8 二叉树的存储结构 9 二叉树的基本运算及其实现 10 二叉树的遍历 [项目1 - 二叉树算法库] 定义二叉树的链式存储结构,实现其基本运算,并完成测试. 要求: 1.头文件btree.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void CreateBTNode(BTNode *&b,ch

数据结构实践项目——树和二叉树(2)

本文针对数据结构基础系列(6):树和二叉树第7, 11-15课时 7 二叉树与树.森林之间的转换 11 二叉树遍历非递归算法 12 层次遍历算法 13 二叉树的构造 14 线索二叉树 15 哈夫曼树 [项目1 - 二叉树算法验证] 运行并重复测试教学内容中涉及的算法.改变测试数据进行重复测试的意义在于,可以从更多角度体会算法,以达到逐渐掌握算法的程度.使用你的测试数据,并展示测试结果,观察运行结果,以此来领会算法. (1)层次遍历算法的验证 [参考链接] (2)二叉树构造算法的验证 [参考链接]

数据结构C#版笔记--树与二叉树

图1 上图描述的数据结构就是"树",其中最上面那个圈圈A称之为根节点(root),其它圈圈称为节点(node),当然root可以认为是node的特例. 树跟之前学习过的线性结构不同,它是一对多的非线性结构,具有二个基本特点: 1.根节点(root)没有前驱节点,除root之外的所有节点有且只有一个前驱节点2.树中的所有节点都可以有0个或多个后继节点. 所以下面这些歪瓜咧枣,不能算是树: 图2 下是是一些烦人但是很重要的术语:  1.结点(Node):表示树中的数据元素,由数据项和数据元

树、二叉树(二)

限于篇幅过长上一篇我们只谈了树.二叉树(一)比较基础的认识,下面我们深入的学习树与二叉树. 顺序存储结构 使用一组地址(一维数组)连续的存储单元来存储数据元素 //-------二叉树的顺序存储表示--------- #define MAXTSIZE 100 //二叉树的最大结点数 typedef TElemType SqBiTree[MAXTSIZE]; SqBiTree bt; 完全二叉树:只需要从根起按层序存储,依次自上而下.自左至右存储结点元素,即将完全二叉树上编号为i的结点元素存储在如

c语言-C语言文件/哈夫曼树/算法/二叉树

问题描述 C语言文件/哈夫曼树/算法/二叉树 在一个函数中,下面这两行运行无错误 fp=fopen("CodeFile.dat","wb"); fwrite(HC[i],sizeof(char),strlen(HC[i])+1,fp); //其中HC的类型是char ** //然后在另外一个函数中加入 fp=fopen("CodeFile.dat","rb"); for(int i=1;i<=n;i++) fread(H

数据结构中树与二叉树基础算法的比较

一:树的创建 在数据结构中,树是以二叉树的形式储存的. 树转换为二叉树形式分为三步: ⑴加线--树中所有相邻兄弟之间加一条连线. ⑵去线--对树中的每个结点,只保留它与第一个孩子结点之间的连线,删去它与其它孩子结点之间的连线. ⑶层次调整--以根结点为轴心,将树顺时针转动一定的角度,使之层次分明.   转换后结果如图: 所以树的创建算法有两个思路: 1.将树转化为二叉树后,以二叉树中结点的关系输入而创建树. 2.直接以树中结点的关系输入,用代码转换为相应的二叉树. 第一种方法实际就是二叉树创建,

树、二叉树基础

刚看到堆排序,顺便记录一下关于树的一些基本概念: 前言 前面介绍的栈.队列都是线性结构(linear structure).而树是非线性结构(non-linear structure).因此,树中的元素之间一般不存在类似于线性结构的一对一的关系,更多地表现为多对多的关系.直观地看,它是数据元素(在树中称为节点)按分支关系组织起来的结构.显然,树形结构是比线性结构更复杂的一种数据结构类型. 一.树 树的定义:树是含有n个节点的有穷集合,其中有一个节点比较特殊称为根节点.在图示树时,用一条边连接两个