二叉树的基本概念与例题(一学就会)

今天我们来讲一下二叉树的概念和例题

要知道什么是二叉树,就先要知道什么是树:

我们来看一下树的详细定义:

        树是一种数据结构,它是由n(n≥0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

        每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点

可能这不是很好理解,我们可以来看一个例子:

 我们来可以下这个树,就可以分析一下上面的那几句话了,首先,上图是一个集合

我们把它标上号,这棵树就如下图:

我们称{B,C}是A的儿子节点,{D,E,F}是B的儿子节点,那么:

我们称A是{B,C}的父节点,B是{D,E,F}的父节点。

然而,我们做出一个表出来,来方便观察每个节点的父节点:

节点ABCDEF
父节点×AABBB

 

 

然后呢,你会发现,A没有父节点,所以我们称A为整棵树的根节点。

所以呢,到此为止,我们在上面那句话就解释完毕了。

我们来讲一下树的”度“的这个概念,其实树的度就是一个节点的儿子个数。

那么,言归正传,其实,二叉树就是每个节点的”度“最高为2的树,我们称它为”二叉树“

我们现在来了解一下二叉树的4个性质:

 二叉树的四个性质(重点):

        第一个性质:

                在非空二叉树中,第i层的总节点数不超过2^{(i-1)},i\geq 1

                这个还是比较好证明:就当第i层都是慢的节点,

                i=1,总节点数是1(2^{0})

                i=2,总节点数是2(2^{1})

                i=3,总节点数是4(2^{2})

                以此类推所以我们得出:在非空二叉树中,第i层的总节点数不超过2^{(i-1)},i\geq 1

         第二个性质:

                深度为h的二叉树最多有2^{h}-1个节点,最少有h个节点。

                最少的很容易想到,在这里不与证明,最大就有一点难,需要一些数学基础

                到深度为h,其实就是2^{0}+2^{1}+---+2^{h-1},公比为2

                所以就是:\frac{(a_{1}-a_{n}*q)}{1-q},带入:\frac{(2^{0}-a^{h-1}*2)}{1-2}

                也就是a^{h-1}*2-1,我们知道a^{h-1}*2=a^{h},所以:

                深度为h的二叉树最多有2^{h}-1个节点,最少有h个节点。

        第三个性质:

                对于任意一棵二叉树,如果其叶节点数为a,读书为2的节点数为b,那么a=b+1

        第四个性质:

                具有n个节点的完全二叉树的深度为log{_{2}}^{n}+1,此性质跟第一个类似,在此不再介绍

我劝你们去休息一下,马上又是重点(看没看到下面的东西在上面的基础上还加了个“难字”)

二叉树的遍历(重难点):

我在这里画一棵二叉树:

 

 我们先来了解一下先序遍历,他的方法是根、左、右,所以先序遍历是:ABDCEGFH

 我们再来了解一下中序遍历,他的方法是左、根、右,所以中序遍历是:DBAGECFH

 我们再来了解一下后序遍历,他的方法是左、右、根,所以后序遍历是:CBGEHFCA

讲的不是很详细,希望谅解一下,建议去看一下这个视频:三分钟教会你遍历二叉树!

时间很短啊,也十分详细,这里上一下二叉树前、中、后序的遍历函数

先序、中序、后序遍历的代码:

void qian(int x){
	if(x>0){
		cout<<tree[x].data<<" ";
		qian(tree[x].left);
		qian(tree[x].right);
	}
}
void zhong(int x){
	if(x>0){
		zhong(tree[x].left);
		cout<<tree[x].data<<" ";
		zhong(tree[x].right);
	}
}
void hou(int x){
	if(x>0){
		hou(tree[x].left);
		hou(tree[x].right);
		cout<<tree[x].data<<" ";	
	}
}

也就这样,自己看吧……

接下来,是二叉树的经典例题,可以参考一下我的这篇博文:找树根和孩子

写的也是十分详细,好了,今天就到此为止吧!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值