【数据结构】树与二叉树

树是一类重要的非线性数据结构,是以分支关系定义的层次结构

定义:

树(tree)是n(n>0)个结点的有限集T,其中: 有且仅有一个特定的结点,称为树的根(root)

当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree)

特点: 树中至少有一个结点——根 树中各子树是互不相交的集合

基本术语

结点(node)——表示树中的元素,包括数据项及若干指向其子树的分支

结点的度(degree)——结点拥有的子树数 叶子(leaf)——度为0的结点

孩子(child)——结点子树的根称为该结点的孩子

双亲(parents)——孩子结点的上层结点叫该结点的~

兄弟(sibling)——同一双亲的孩子

树的度——一棵树中最大的结点度数

结点的层次(level)——从根结点算起,根为第一层,它的孩子为第二层……

深度(depth)——树中结点的最大层次数

森林(forest)——m(m?0)棵互不相交的树的集合

二叉树

定义:二叉树是n(n?0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成

特点 每个结点至多有二棵子树(即不存在度大于2的结点) 二叉树的子树有左、右之分,且其次序不能任意颠倒

性质  1.二叉树第i层至多有2^(n-1)个节点(i>=1)

2.深度为k的二叉树至多有2^k-1个结点(k>=1)

3.对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1

证明:n1为二叉树T中度为1的结点数

因为:二叉树中所有结点的度均小于或等于2

所以:其结点总数n=n0+n1+n2

又二叉树中,除根结点外,其余结点都只有一个分支进入

设B为分支总数,则n=B+1

又:分支由度为1和度为2的结点射出

所以B=n1+2n2

于是,n=B+1=n1+2n2+1=n0+n1+n2

所以:n0=n2+1

特殊形式的二叉树

满二叉树:一棵深度为k且有2^k-1个节点的二叉树称为满二叉树

     完全二叉树:深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一

一对应时,称为完全二叉树.

特点:叶子结点只可能在层次最大的两层上出现

对任一结点,若其右分支下子孙的最大层次为L

则其左分支下子孙的最大层次必为L 或L+1

性质  1.具有n个节点的完全二叉树的深度为 log2^n+1

                      2.如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1<=i<=n),有:

(1) 如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是i/2

(2) 如果2i>n,则结点i无左孩子;如果2i<=n,则其左孩子是2i

(3) 如果2i+1>n,则结点i无右孩子;如果2i+1<=n,则其右孩子是2i+1

时间: 2024-12-20 21:34:28

【数据结构】树与二叉树的相关文章

数据结构---树、二叉树、森林

1.基本术语: 度:有两种度"结点的度"与"树的度".结点的度指的是一个结点子树的个数:树的度是指树中结点度的最大值. 叶子结点:指的是没有子树的结点. 层:树是有层次的,一般根结点为第0层.规定根结点到某结点的路径长度为该结点的层数. 深度:树中结点的最大层数 兄弟:同一双亲的结点,互为兄弟 堂兄弟:双亲在同一层次的结点,互为堂兄弟 祖先:从根结点到该结点的路径上的所有结点都是该结点的祖先. 子孙:以某一结点为根的子树上的所有结点都是该结点的子孙 森林:n棵互不相

数据结构--树,二叉树

树和二叉树用来表示数据之间一对多的关系,而线性表,栈,队列都是线性的数据结构,用来表示一对一的关系. 树只有一个根节点,根也有子节点,子节点又对应多个或者一个子节点. 根节点没有父节点. 同一个节点有可能既是父节点,又是子节点. 普通节点含有子节点,叶子界面没有子节点. 节点:树的基本单位. 节点的度:节点子树的个数. 树的度:所有节点的度的最大值. 叶子节点,无子节点的节点,即度为0的节点. 分支节点,有子节点的节点为分支节点. 节点层次,根节点1,以此类推. 输的深度:节点最大层次. 有序树

浅谈数据结构-树和二叉树之间关系

树都可用二叉链表作为存储结构,对比各自的结点结构可以看出,以二叉链表作为媒介可以导出树和二叉树之间的一个对应关系. ◆ 从物理结构来看,树和二叉树的二叉链表是相同的,只是对指针的逻辑解释不同而已. ◆ 从树的二叉链表表示的定义可知,任何一棵和树对应的二叉树,其右子树一定为空. 1 树转换成二叉树 对于一般的树,可以方便地转换成一棵唯一的二叉树与之对应.将树转换成二叉树在"孩子兄弟表示法"中已给出,其详细步骤是: ⑴ 加虚线.在所有兄弟结点之间加线. ⑵ 去连线.只保留大孩子(除最左的第

数据结构 -树和二叉树

树的主要内容 树型结构:非线性结构,以分支关系定义的层次结构. 主要内容: 树和二叉树的概念.性质 二叉树的存储 二叉树的遍历 线索二叉树 树与二叉树的转化 Huffman树(最优树) 树的定义 树(Tree)是n(n≧0)个结点的有限集合T,若n=0时称为空树,否则: ⑴ 有且只有一个特殊的称为树的根(Root)结点: ⑵ 若n>1时,其余的结点被分为m(m>0)个互不相交的子集 T1, T2, T3-Tm,其中每个子集本身又是一棵树,称其为根的子树(Subtree). 这是树的递归定义,即

C#数据结构—树和二叉树

线性结构中的数据元素是一对一的关系,树形结构是一对多的非线性结构,非常类似于自然界中的树,数据元素之间既有分支关系,又有层次关系.树形结构在现实世界中广泛存在,如家族的家谱.一个单位的行政机构组织等都可以用树形结构来形象地表示.树形结构在计算机领域中也有着非常广泛的应用,如 Windows 操作系统中对磁盘文件的管理.编译程序中对源程序的语法结构的表示等都采用树形结构.在数据库系统中,树形结构也是数据的重要组织形式之一.树形结构有树和二叉树两种,树的操作实现比较复杂,但树可以转换为二叉树进行处理

数据结构-树与二叉树

一.树的定义与性质 <1>定义 结点(node):树枝分叉处.树叶.树根 根结点(root):树根 叶子结点(leaf):叶子结点 边(edge):茎干和树枝 子结点(child) 子树(subtree) <2>性质 树可以没有结点,把这种情况下称为空树(empty tree) 树的层次(layer),从根结点开始算起来,即根结点为第一层 把结点的子树棵树称为结点的度(degree),而树的中结点的最大的度称为树的度(也称为树的宽度) 对于有n个结点的树的边一定是n-1 叶子结点被

数据结构—树(二叉树)

#define _CRT_SECURE_NO_WARNINGS 1 //树:非线性的数据结构,由有限个节点组成一个具有层次关系的集合.像是一颗倒挂的树,所以叫树. //树的相关概念: //1.节点的度:一个节点含有的子树的个数成为节点的度 //2.叶节点(终端节点):度为0的节点称为终端节点,(子节点为空的节点) //3.非终端节点(分支节点):度不为0的节点,即(子节点不为空的节点) //4.双亲节点(父节点):若一个节点含有子节点,称该节点为子节点的父节点 //5.孩子节点(子节点):一个节

python数据结构树和二叉树简介

一.树的定义 树形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树.树的递归定义:树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:(1)有且仅有一个特定的称为根(Root)的结点:(2)其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subree). 二.二叉树的定义 二叉树是由n(n≥0)个结点组成的有限集合.每个结点最多有两个子树的有序树

数据结构----树、二叉树----c++ &amp;&amp; python

树结构,尤其是二叉树结构是算法中常遇见的,这里根据学习过程做一个总结. 二叉树所涉及到的知识点有:满二叉树与完全二叉树.节点数目的关系.节点数与二叉树高度的关系.层次遍历.深度优先遍历.广度优先遍历等等. 这里对二叉树的基本结构实现c++版本以及python版本的代码,并且实现二叉树的前中后序遍历过程以及前中.中后序列创建唯一二叉树的过程. 1.C++版本实现 基本结构: http://www.cnblogs.com/elleniou/archive/2012/05/03/2480042.htm

数据结构学习笔记(树、二叉树)

树(一对多的数据结构) 树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树种: (1)有且仅有一个特定的称为根(Root)的结点: (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2........Tn,其中每一个集合本身又是一棵树,并且称为根的子树. 对于树的定义还需要强调两点:1.n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点.2.m>0时,子树的个数没有限制,但它们一定是互不相交的. 结点