数据结构之——树与二叉树

树的基本概念:

树的概念是学习树的关键所在,掌握了树的基本概念,学会树与二叉树,so easy。我通过一棵树来了解树的基本概念,如下图

1、结点的度

结点的度是子结点的个数。例如:结点1有三个字结点2,3,4,所以结点1的度为3。

2、树的度

树的度等于所有结点度中度最高的值。例如:上图中结点度最高为3,所以树的度为3。

3、叶子结点

叶子结点是度为0的结点即没有子结点的结点。例如:上图中3,5,6,7,9,10。

4、分支结点

分支结点是除了叶子结点,树中的其他所有结点。例如:上面树的分支结点为1,2,4,8。

5、内部结点

内部结点是除了根结点以及叶子结点或在分支结点的基础之上在去掉根结点。例如:上面树的内部结点为2,4,8。

6、父结点、子结点、兄弟结点

父节点、子结点和兄弟结点是相对而言的。例如:结点1是结点2,3,4的父节点,结点2,3,4也是结点1的子结点,结点2,3,4又是兄弟结点。

7、层次

图中我们已经表出来了,根为第一层,根的孩子为第二层,依此类推,若某结点在第i层,则其孩子结点在第i+1层。

树的遍历

树的遍历特别简单,我们还是以上面的树为例:

1、前序遍历

基本思想:前序遍历就是先访问根结点,再访问叶子结点。

图中树的前序遍历为:1,2,5,6,7,3,4,8,9,10。

2、后序遍历

基本思想:本后序遍历就是先访问子结点,再访问根结点。

图中树的后序遍历为:5,6,7,2,3,9,10,8,4,1。

3、层次遍历

基本思想:从第一层开始,依此遍历每层,直到结束。

图中树的层次遍历为:1,2,3,4,5,6,7,8,9,10。

二叉树的一些相关概念和特性

学习二叉树的特性几乎可以帮助我们解决所有的二叉树问题,在学习二叉树特性一定要通过上面给出的二叉树进行实践,实践出真理,同时,印象也会更深刻。

一般二叉树性质:

  1. 在非空二叉树的k层上,至多有2k个节点(k>=0)
  2. 高度为k的二叉树中,最多有2k+1-1个节点(k>=0)
  3. 对于任何一棵非空的二叉树,如果叶节点个数为n0,度数为2的节点个数为n2,则有: n0 = n2 + 1

完全二叉树性质:

  1. 具有n个节点的完全二叉树的高度k为[log2n]
  2. 对于具有n个节点的完全二叉树,如果按照从上(根节点)到下(叶节点)和从左到右的顺序对二叉树中的所有节点从0开始到n-1进行编号,则对于任意的下标为k的节点,有:
  • 如果k=0,则它是根节点,它没有父节点;如果k>0,则它的父节点的下标为[(i-1)/2];
  • 如果2k+1 <= n-1,则下标为k的节点的左子结点的下标为2k+1;否则,下标为k的节点没有左子结点.
  • 如果2k+2 <= n-1,则下标为k的节点的右子节点的下标为2k+2;否则,下标为k的节点没有右子节点

满二叉树性质:

在满二叉树中,叶节点的个数比分支节点的个数多1

二叉树遍历

1、前序遍历(与树的前序遍历一样)

基本思想:先访问根结点,再先序遍历左子树,最后再先序遍历右子树即根—左—右。

图中前序遍历结果是:1,2,4,5,7,8,3,6。

2、中序遍历

基本思想:先中序遍历左子树,然后再访问根结点,最后再中序遍历右子树即左—根—右。

图中中序遍历结果是:4,2,7,8,5,1,3,6。

3、后序遍历

基本思想:先后序遍历左子树,然后再后序遍历右子树,最后再访问根结点即左—右—根。

图中后序遍历结果是:4,8,7,5,2,6,3,1。

4、层次遍历(与树的层次遍历一样)

基本思想:从第一层开始,依此遍历每层,直到结束。

图中层次遍历结果是:1,2,3,4,5,6,7,8。

树与二叉树区别

1、树可以有多个子结点,二叉树最多只能两个结点。

2、树中的子结点是无序的,二叉树是分左子结点和右子结点。

3、二叉树不是特殊树,而是独立的数据结构。

FROM:

我的软考之路(四)——数据结构与算法(2)之树与二叉树 - 努力+坚持,而且还很年轻 - 博客频道 - CSDN.NET
http://blog.csdn.net/jiuqiyuliang/article/details/23961305

时间: 2024-10-03 13:45:07

数据结构之——树与二叉树的相关文章

javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作

树型结构是一类非常重要的非线性结构.直观地,树型结构是以分支关系定义的层次结构. 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构:在数据库系统中,可用树来组织信息:在分析算法的行为时,可用树来描述其执行过程等等. 下面讲解的内容完整代码在这:https://github.com/LukeLin/data-structure-with-js/blob/master/Binary%20tree/BinaryTree.js 首先看看树的一些概念: 1.树(Tree)是n

javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支构成这两个结点之间的路径. ② 路径长度:结点路径上的分支数目称为路径长度. ③ 树的路径长度:从树根到每一个结点的路径长度之和. 以下图为例: A到F :结点路径 AEF : 路径长度(即边的数目) 2 : 树的路径长度:3*1+5*2+2*3=19: ④ 结点的带权路径长度:从该结点的到树的根结

数据结构:树与二叉树

大部分笔记摘自<大话数据结构>与<数据结构> 一:相关定义 1.树是n个结点的有限集,n=0时称为空树.在任意一颗非空树中:(1)有且仅有一个特定的称为根的结点:(2)当n>1时,其余结点可分为m个互不相交的有限集,T1.T2.--.Tm,其中每一个集合本身又是一颗树,并且称为根的子树. 2.结点拥有的子树数称为结点的度,而树的度为结点的度的最大值.度为0的结点称为叶结点或终端结点,度不为0的结点称为分支结点.内部结点或非中断结点. 3.结点的子树的根称为结点的孩子,该结点称

数据结构之树与二叉树(理论篇)

一.树 树的定义:树是n(n>=0)个结点的有限集. 对于任意一棵非空树:(1)有且仅有一个特定的结点称为根结点:(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,T3···,Tm,其中每一个集合本身又是一棵树,并且称为根的子树. 结点:树的结点包含一个数据元素及若干指向其子树的分支. 度(degree):结点拥有的子树数称为结点的度. 叶子(leaf):度为0的结点称为叶子或终端结点:度不为0的结点称为非终端结点或分支结点,除根结点外,分支结点也称为内部节点.

数据结构2 树与二叉树

1.树结构是一种非常重要的非线性结构,该结构中的一个数据元素可以有两个或两个以上的直接后继元素,树可以用来描述客观世界中广泛存在的层次结构关系. 2. 树本身是递归的,即一棵树由若干颗子树构成,而子树又由更小的子树构成. 3. 二叉树的遍历过程实质上是按一定规则将之线性化的过程.按照先遍历左子树后遍历右子树的约定,根据访问根结点位置的不同,可得到二叉树的先序.中序.后序的遍历方法. 对于上面的二叉树,若采用先序遍历法,则按照根结点-左子树-右子树的顺序迭代遍历,先输出1,然后遍历其左子树,输出左

【数据结构】树与二叉树

树是一类重要的非线性数据结构,是以分支关系定义的层次结构 定义: 树(tree)是n(n>0)个结点的有限集T,其中: 有且仅有一个特定的结点,称为树的根(root) 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,--Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree) 特点: 树中至少有一个结点--根 树中各子树是互不相交的集合 基本术语 结点(node)--表示树中的元素,包括数据项及若干指向其子树的分支 结点的度(degree)--结点拥有的子树

(转)数据结构:树、二叉树、最优二叉树

来源:http://www.cnblogs.com/coder2012/archive/2013/06/05/3102868.html 树 树形结构是一类非常重要的非线性结构,它可以很好地描述客观世界中广泛存在的具有分支关系或层次特性的对象,因此在计算机领域里有着广泛应用,如操作系统中的文件管理.编译程序中的语法结构和数据库系统信息组织形式等. 树的相关定义 节点的度:一个节点含有的子树的个数称为该节点的度: 树的度:一棵树中,最大的节点的度称为树的度: 叶节点或终端节点:度为零的节点: 非终端

【数据结构】树与二叉树的基本概念

1. 树的定义与抽象数据类型 (1) 树的定义 树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一棵非空树中: 有且仅有一个特定的称为根(root)的结点: 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2.…….Tm,其中每一个集合本身又是一棵树,并且称为根的子树(subTree). 需要注意的是: n>0时根结点是唯一的,不可能存在多个根结点,别和现实中的大树混为一起,现实中的树有很多根须,那是真实的树,数据结构中的树是只能有一个根结点:

数据结构之树和二叉树实现

二叉树 二叉树的抽象数据类型的接口定义 public interface BinaryTree { final String []mode={"preOrder","inOrder","postOrder","levelOrder"}; boolean createBTree(String gt); boolean isEmpty(); void traverseBTree(String s); Object findBTre