首页 > 编程语言 > 详细

树的基本概念以及java实现二叉树

时间:2019-09-19 19:50:40      阅读:92      评论:0      收藏:0      [点我收藏+]

树具有的特点有:

(1)每个结点有零个或多个子结点

(2)没有父节点的结点称为根节点

(3)每一个非根结点有且只有一个父节点

(4)除了根结点外,每个子结点可以分为多个不相交的子树。

?

树的基本术语有:

若一个结点有子树,那么该结点称为子树根的“双亲”,子树的根称为该结点的“孩子”。有相同双亲的结点互为“兄弟”。一个结点的所有子树上的任何结点都是该结点的后裔。从根结点到某个结点的路径上的所有结点都是该结点的祖先。

?

结点的度:结点拥有的子树的数目

叶子结点:度为0的结点

分支结点:度不为0的结点

树的度:树中结点的最大的度

层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1

树的高度:树中结点的最大层次

森林:0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林。

二叉树的性质

a、在非空二叉树的第i层上,至多有2^(i-1)个结点
假设这是一棵满二叉树,则1、2、3层分别有1、2、4个结点,满足以上性质

b、深度为k的二叉树至多有2^k-1个结点
假设这是一棵满二叉树,则4层有15个结点,满足以上的性质

c、对任何一颗二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0 = n2+1
假设二叉树中度为1的结点数为n1,因为二叉树只有度为1,2,0的结点,所以有n=n0+n1+n2。再看二叉树分支条数e,因为二叉树除了根结点没有父结点,进入它的边数为0之外,其他每一结点都有一个且仅有一个父结点,进入它们的边数均为1,故二叉树中总的边数为e=n-1=n0+n1+n2-1。又由于每个度为2的结点发出2条边,每个度为1的结点发出1条边,每个度为0的结点发出0条边,因此总的边数e=2n2+1n1+0n0=2n2+n1,由以上两式可以得出n0= n2+1

上图中结点总数是10,n2(1、2、3、4)为4,n1(5)为1,n0(6、7、8、9、10)为5

d、具有n个结点的完全二叉树深度为?log2(n+1)?,对以2为底n+1对数进行向上取整(??是向上取整符号)
可以由性质2得出,深度为k的完全二叉树最多有 n \leq 2^{k}-1个结点,最少有2^{k-1}-1个,因此:

2^{k-1}-1 < n \leq 2^{k}-1

2^{k-1} < n+1 \leq 2^{k}

k-1 < log_{2}(n+1) \leq k

因为log_{2}(n+1)介于 K-1 和 K之间且不等于 K-1,深度又只能是整数,所以有?log_{2}(n+1)?

e、如果有一颗有n个结点的完全二叉树的结点按层次序编号,对任一层的结点i(1<=i<=n)有
如果i=1,则结点是二叉树的根,无双亲,如果i>1,则其双亲结点为?i/2?,向下取整
如果2i>n那么结点i没有左孩子,否则其左孩子为2i
如果2i+1>n那么结点没有右孩子,否则右孩子为2i+1
若结点i为奇数,且i!=1,它处于右兄弟位置,则它的左兄弟结点i-1
若结点i为偶数,且i!=n,它处于左兄弟位置,则它的右兄弟为结点i+1

https://github.com/mcrwayfun/java-data-structure/blob/master/doc/source/tree/%E6%A0%91.md#23-%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%80%A7%E8%B4%A8

https://blog.csdn.net/skylibiao/article/details/81195219

https://blog.csdn.net/qingtian_1993/article/details/80637917
https://github.com/mcrwayfun/java-data-structure/blob/master/doc/source/tree/%E6%A0%91.md

树的基本概念以及java实现二叉树

原文:https://www.cnblogs.com/antball/p/11551589.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!