[软考]之树和二叉树

简介: [软考]之树和二叉树

 对于具有层次的数据,需要用树形结构来描述,那么什么是树,树应该如何表示使用呢?下面,就随着这篇博文,来感受一下树的魅力吧。


树的基本组成:


关于树的基本组成,先来看一下定义:


树(tree)是包含n(n>0)个结点的有穷集,其中:


          (1)每个元素称为结点(node);


          (2)有一个特定的结点被称为根结点或树根(root)。


          (3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。


       我在网上找了几张表示树的图,大家可以看一下,帮助理解:



 说完了树,顺便提一下森林,森林是m(>=0)棵互不相交的树的集合,树的每个结点的子树是森林,删除一个非空树的根结点,它的子树便构成森林,比如上图中的3号树,将它的根A删除,那么以B为根和以C为根的两棵互不相交的树便构成了森林。


树的相关术语:


        对于树,我们有一些比较专业的叫法来称呼它的各个部位,比如结点的度,叶子,树的度等等,下面仍旧用一张图来表示:



二叉树


  我们所说的二叉树,就是树的一中特殊结构,即由一个根及两棵互不相交的左子树和右子树组成,其中左子树和右子树也均为二叉树,简而言之,任何一个结点的孩子,都不超过两个。二叉树有5个性质,即:


         1.在二叉树的第i层上最多有2 i-1 个节点 。


         2.二叉树中如果深度为k,那么最多有2k-1个节点。


         3.n0=n2+1  n0表示度数为0的节点 n2表示度数为2的节点。


         4.在完全二叉树中,具有n个节点的完全二叉树的深度为[log2n]+1,其中[log2n]+1是向下取整。


         5.如果有一颗有n个节点的完全二叉树的节点按层次序编号,对任一层的节点i(1<=i<=n)有


             1.如果i=1,则节点是二叉树的根,无双亲,如果i>1,则其双亲节点为[i/2],向下取整  


             2.如果2i>n那么节点i没有左孩子,否则其左孩子为2i


             3.如果2i+1>n那么节点没有右孩子,否则右孩子为2i+1


       二叉树也分为几种类型,分别为:满二叉树,完全二叉树和非完全二叉树,我们直接上图来看:



满二叉树即满足深度为K且有2^K-1个结点。完全二叉树是从满二叉树的结构来判断的,即:一颗深度为k二叉树,有n个节点,然后,也对这棵树进行编号,如果所有的编号都和满二叉树对应,那么这棵树是完全二叉树。附图一张:



 这就是树和二叉树的基本概念和组成标准了,下面一篇博文我们会讨论对于二叉树的遍历和一些计算,未完待续哦~

目录
相关文章
|
7月前
|
存储 算法 编译器
一篇文章教会你什么是二叉搜索树(上)
二叉搜索树概念 二叉搜索树(Binary Search Tree,BST)是一种二叉树的特殊形式,它具有以下关键性质:
|
4天前
|
Windows
孤独的树(牛客月赛)
孤独的树(牛客月赛)
16 0
|
4天前
|
算法
数据结构与算法之树
红黑树 1.如果一个树要是红黑树,那么这个树首先就要满足平衡二叉树的性质。
36 1
|
9月前
|
算法 程序员
程序员怎能不会二叉树系列(一)简单了解二叉树
程序员怎能不会二叉树系列(一)简单了解二叉树
|
11月前
|
IDE Java 开发工具
[软考]之树与二叉树的遍历
[软考]之树与二叉树的遍历
57 0
|
算法
算法竞赛题解:校门外的树
NOIP2005 普及组:校门外的树
204 0
|
算法
初级算法之树
树比链表稍微复杂,因为链表是线性数据结构,而树不是。 树的问题可以由 广度优先搜索 或 深度优先搜索 解决。 在本章节中,我们提供了一个对于练习 广度优先遍历 很好的题目。 我们推荐以下题目: 二叉树的最大深度,验证二叉搜索树,二叉树的层次遍历 和 将有序数组转换为二叉搜索树。 剑指 Offer 55 - I. 二叉树的深度 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 递归法: class Solution { public int maxDepth(TreeNode root) {
37 0