树的概念

定义:

树:连通无回路的无向图是一棵树.

森林:若图G中至少有两个连通分支,每个连通分支都是树,则称图G是森林.

根:树中的根是树的一个节点,任意节点都可以为根,根据不同问题可以选择树的一个顶点为根.

子节点&父节点:树根为0层,直接和树根相连的节点为根节点的子节点,根节点为其父节点,根节点的子节点为树的1层.对于除了根节点以外的节点u来说,直接与其相连的节点中,除了一个父节点以外的所有节点都是u的子节点,u节点的子节点的层数为u节点的层数加1.

子树:对于树中的一个节点u来说,包含其一个儿子节点以及儿子节点的所有后辈节点的树称为节点u的子树.

兄弟节点:同一父节点的子节点.

叶子节:没有子节点的节点称为叶子节点.

分支节点:除了根节点和叶子节点之外的所有节点都称为分支节点.

树高:树的总层数.

二叉树:如果每个节点的儿子节点不多于两个,则称这棵树为二叉.每个父节点的子节点用左右儿子节点来加以区分,以左儿子节点为根的子树称为左子树,以右儿子节点为根的树称为右子树.

满二叉树:如果一个二叉树的任何节点或者树叶,或者恰好有两颗非空子树,则此二叉树称为满二叉树.

完全二叉树:如果一棵二叉树最多只有最下面的两次节点度数小于2,并且最下面一层的节点都集中在该层的最左边的连续位置,成称其实完全二叉树.

性质:

对于一棵有N个节点的树,一定有(N - 1)条边,如果删去一条边,将变成两棵树;如果添加一条边.将出现唯一一条回路.

树上任意两个顶点之间存在唯一路径.

在二叉树的第i层上至多有2^(i - 1)个节点(i >= 1).

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

对于任何一个二叉树,如果其叶子节点的数目为n0,度为2的节点数目为n2,则有n0 = n2 + 1.

具有n个节点的完全二叉树的深度为(int)log2(n) + 1.

树的遍历:

二叉树的遍历1)前序遍历

  前序遍历的递归定义:对于一个节点,访问并输出根的信息;按照前序遍历左子树;按照前序遍历右子树.

2)中序遍历

  中序遍历的递归定义:对于一个节点,按照中序遍历左子树;访问并输出根的信息;按照中序遍历右子树.

3)后序遍历

  后序遍历的递归定义:对于一个节点,按照后序遍历左子树;按照后续遍历右子树;访问并输出根的信息.

总结:对于二叉树的三种遍历次序来说,整棵树的根一定是前序遍历序列的第一个节点,一定是后序遍历序列的最后一个节点.在中序遍历序列中,根节点前面的点一定属于根的左子树,根节点后面的点一定属于右子树.只要回到一棵二叉树的中序遍历序列和前序(或者后序)遍历序列,就可以唯一的确定二叉树的结构并写出另一种遍历序列.否则不能确定.

  上述的三种遍历方式,除了中序以外都可以扩展到k叉树(每个节点的子节点个数都小于或者等于k)上.

时间: 2024-10-11 11:48:17

树的概念的相关文章

swift_枚举 | 可为空类型 | 枚举关联值 | 枚举递归 | 树的概念

***************可为空的类型 var demo2 :we_demo = nil 上面这个代码串的语法是错的 为什么呢, 在Swift中,所有的类型定义出来的属性的默认值都不可以是nil 不管是普通简单值类型还是引用类型 那我就是要让这个属性默认值为空,为nil 怎么办呢,很简单,用语法,在定义这个属性的时,在类型后面声明一个? 这样就表示这个属性除了指定类型的默认值外还可以是一个可为空的类型 在Java中,最常见的错误类型就是NullPoinExecption, 为什么就是要有Nu

CSS z-index 属性的使用方法和层级树的概念

CSS 中的 z-index 属性用于设置节点的堆叠顺序, 拥有更高堆叠顺序的节点将显示在堆叠顺序较低的节点前面, 这是我们对 z-index 属性普遍的认识. 与此同时, 我们总是对堆叠顺序捉摸不透, 将 z-index 的值设得很大也未必能将节点显示在最前面. 本文将通过一些例子对 z-index 的使用方法进行分析, 并且为各位带入 z-index 层级树的概念. 顺序规则 如果不对节点设定 position 属性, 位于文档流后面的节点会遮盖前面的节点. 定位规则 如果将 positio

【转】CSS z-index 属性的使用方法和层级树的概念

文章转自:CSS z-index 属性的使用方法和层级树的概念,另外加了一点自己的注释 CSS 中的 z-index 属性用于设置节点的堆叠顺序, 拥有更高堆叠顺序的节点将显示在堆叠顺序较低的节点前面, 这是我们对 z-index 属性普遍的认识. 与此同时, 我们总是对堆叠顺序捉摸不透, 将 z-index 的值设得很大也未必能将节点显示在最前面. 本文将通过一些例子对 z-index 的使用方法进行分析, 并且为各位带入 z-index 层级树的概念. 这个星期我们团队做了一次内部的技术分享

34. 蛤蟆的数据结构笔记之三十四树的概念

34. 蛤蟆的数据结构笔记之三十四树的概念 本篇名言:"过去属于死神,未来属于你自己.--雪莱" 本篇笔记开始我们要进入新的概念了,树!是不是有点小激动呢?让我们从概念开始吧 当然概念要理解,如果当前不能立刻理解,可以后续结合代码一起理解效果更佳. 1.  树型结构 之前我们学习的那么多,其实都是线性数据结构. 树 则不同,它是非线性结构. 树形结构指的是数据元素之间存在着"一对多"的树形关系的数据结构,是一类重要的非线性数据结构.在树形结构中,树根结点没有前驱结点

java数据结构与算法之树基本概念及二叉树(BinaryTree)的设计与实现

[版权申明]未经博主同意,不允许转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53727333 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈(Stack)设

Trie树基本概念和训练指南

接触Trie树是在选拔赛时候遇到一题目,TLE无数次依然无解,赛后发现字符串统计有一利器名曰"字典树",后来花了一段时间去写Trie,算是基本入门了. 本文主要是介绍一些基本概念,以及一些训练题目,提供大家. 什么叫Trie树? Trie树即字典树. 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字

设备树基本概念

[DTS]设备树基本概念 原创: 杨永达 嵌入式软件开发交流 2月28日 前言 最近在总结一些关于设备树相关的知识,对于做驱动这一块的人应该都会接触到.平常可能很多人移植驱动时也会去改dts文件,但是很多人都是按照模板改,或者网上找过来改,知其然不知其所以然. 什么是设备树 在Linux3.x之前的内核源码中,存在大量对板级细节信息描述的代码.这些代码充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx目录.为了解决这个问题而引入设备树.  官方对设备树的描述是,一种

伸展树基本概念基本题目

http://blog.csdn.net/discreeter/article/details/51524210   //基本概念详见这里 例题HDU4453 代码来源http://blog.csdn.net/auto_ac/article/details/12318809 伸展树我个人理解就是每次查询或更改都要将其移动至根节点 另外伸展树有单点操作和区间操作 维护的是一个中序遍历(这点很重要) 旋转操作的话结合概念和代码还是很清晰的,有左旋(当要进行旋转操作的是其根节点的右节点),右旋(当要进

Mysql与索引有关的树的概念

1.简单地认识下与索引有关的数据结构: 树的简单概念:由n个节点组成具有层次关系的集合,根朝上叶朝下 树的特点:每个节点有0或多个子节点,无父节点称为根节点,每个非根节点有且只有一个父节点,每个节点可分为多个不相交的子树(父节点除外) 二叉树的简单概念:每个节点最多有2个子树的树结构,有左右子树之分 二叉查找树的简单概念:二叉树的前提下,左子树上所有节点的值均小于/等于其父节点的值,右子树上所有几点的值均大于/等于其父节点的值,左右子树也分别为二叉查找树 二叉查找树的查找步骤:小于往左,大于往右

数据结构(12)_树的概念及通用树的实现

1.树的定义与操作 1.1.树的相关定义 1.树的定义 树是一种非线性的数据结构,右n(n>=0)个结点组成的有限集合,如果n=0,称为空树,如果n>0,则: 有一个特定的结点被称之为跟结点(root),根结点只有直接后继,没有前驱, 除根结点外的其他结点划分为m(m>=0)个互不相交的有限集合T0,T1...Tm-1,每一个集合又是一颗子树,并称之为跟的子树.树的示例如下: 2.树中度的概念 树的结点包含一个数据及如果指向子树的分支,结点拥有的子树数目称为结点的度(度为0的结点称为叶结