您的位置:首页 > 理论基础 > 数据结构算法

二叉树基本概念一览

2017-03-10 11:13 302 查看

二叉树基本概念一览

二叉树是数据结构中非常重要的内容,在计算机科学中,每个结点最多有两个子树的结构被称作二叉树,其相关概念繁多,学习起来让很多人头疼,本篇博文就其中一些比较重要的基础进行一下简单的梳理和介绍。

首先介绍一个二叉树中最基本的内容——**结点**,直观来看它就是二叉树中用圈圈框起来的一个个的点,其包含数据元素和若干指向子树的分支。




下面就此展开。

子树

二叉树每个结点的的分支称作该结点的子树,其左侧分支称为左子树,右侧分支称为右字树。


结点层次

一个结点的层次直观上来说就是其所在的行,其中根结点层次为1(第一行),其子结点层次为2(第二行),以此类推,第l行的结点为l。


二叉树的深度(高度)

二叉树的深度(高度)指的是二叉树中的最大叶子结点所在的层。
二叉树的深度=max(左子树深度,右子数深度)+1,可用递归的方式实现。


如最上图中的二叉树深度为5。

结点的度

二叉树结点的度指该结点分支的个数,一棵非空二叉树结点的度只有以下三种情况:


没有分支的结点度为0 :如下图中6、7、8、9、10

只有一个分支(左或右)结点度为1 :如下图中5

有两个分支的结点度为2:如下图中1、2、3、4



二叉树结点的度最大为2。

结点种类

二叉树的结点主要有以下几种:


根结点:第一层的结点 如上图1

叶子结点 :度为0的结点,也就是没有分支的结点 上图6、7、8、9、10

分支结点 :度不为0的结点 上图1、2、3、4、5

孩子结点:结点的子树的根称为该结点的孩子 如2和3是1的孩子结点,4和5是2的孩子结点

兄弟结点:同一双亲的孩子结点 如2和3,4和5,6和7,8和9

祖先结点: 从根到该结点的所经分支上的所有结点 如10的祖先结点是1,2,5

子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙 如

关于结点有以下性质:

在非空二叉树中,第i层的结点总数最大为2^i-1,i>=1(满树情况)

深度为h的二叉树最多有 2^h-1个结点(h>=1),最少有h个结点

对于任意一棵二叉树,设其总结点数为N,如果其叶结点(度为0的结点)数为N0,而度数为2的结点总数为N2,则N0=N2+1,度为1的结点数N1=N-N0-N2

具有n个结点的完全二叉树的深度为log(N+1),底数为2

有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:

若I为结点编号则 如果I>1,则其父结点的编号为I/2

如果2×I<=N,则其左儿子(即左子树的根结点)的编号为2×I

若2×I>N,则无左儿子

如果2×I+1<=N,则其右儿子的结点编号为2×I+1

若2×I+1>N,则无右儿子

给定N个结点,能构成h(N)种不同的二叉树。 h(N)为卡特兰数的第N项。h(n)=C(2*n,n)/(n+1)

设有i个分支点,I为所有分支点的道路长度总和,J为叶的道路长度总和J=I+2i

遍历

二叉树的基本遍历有三种:前序遍历、中序遍历和后序遍历,除此之外还有分层遍历等。其中基本遍历代码实现时可采用递归方式,其过程如下:
前序遍历:访问根结点;前序遍历左子树;前序遍历右子树 图2 12489[10]367
中序遍历:中序遍历左子树;访问根结点;中序遍历右子树     8492[10]51637
后序遍历:后序遍历左子树;后序遍历右子树;访问根结点     894[10]526731

分层遍历(广度优先搜索):用队列实现。队列初始化,压入根结点,队列不为空时,弹出一个结点,访问,左右子结点不为空时,压入左右子结点。


分类

完全二叉树:若设二叉树的高度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布

满二叉树:除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树

平衡二叉树(AVL):二叉排序树,空,或左子树和右子树都是平衡二叉树,且深度差<=1



参考:

http://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%A0%91?fr=aladdin
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 数据结构