刷题(5)-树(1)

树的各种概念:

 树的完整概念

二叉树

节点表示:

struct btnode{
	int data;
	btnode *left;
	btnode *right;
}

几个性质:

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

2.  深度为k的二叉树至多有2^k-1个节点  (2^0 + 2^1 +....+2^(k-1) = 2 ^ k -1) (假如只有根节点,深度为1)

3. 对任何一棵二叉树T,如果叶子节点数为n0,度为2(左右孩子双全)的节点数为n2 ,那么 n0 = n2 +1

证明:二叉树节点度数最大为2,则 : n = n0 + n1 + n2 (等式一)
从孩子个数角度出发: 度为0的节点没有孩子, 度为1的节点没有1个孩子,度为2的节点有2个孩子,孩子总数为 n00 + n11 +n2 2 = n1+2n2;树的所有节点中,只有根不是任何节点的孩 子,因此有 n -1 = n1 + 2* n2 ,即 n = n1 + 2* n2 + 1. (等式二)
由等式一等式而可以推出 n0 = n2 +1

4. 满二叉树和完全二叉树的定义:

满二叉树要满足两个条件:                                             

  1. 所有的节点都同时具有左子树和右子树。             
  2. 所有的叶子节点都在同一层上。

完全二叉树:

在一棵二叉树中,只有最下两层的度可以小于2,并且最下一层的叶子节点集中出现在靠左的若干位置上。

二叉树的4种遍历:

四种遍历

二叉查找树

定义

二叉排序树或者是一棵空树,否则要求:

  1. 若它的左子树不为空,那么左子树上所有节点的值都小于根节点的key
  2. 若它的右子树不为空,那么右子树上所有节点的值都大于根节点的key
  3. 它的左右子树也分别为二叉排序树

根据定义,二叉查找树中没有重复key的节点。

二叉查找树,最重要的是它的中序遍历(左中右)是一个递增序列。(有些题在这作文章)

还有个重要的是二叉查找树的删除操作。(当两个孩子都在的时候,找右子树的最左节点)

bst的删除操作

二叉搜索树的实现: 刷题(5)-二叉查找树(2)_speargod的博客-CSDN博客

堆的性质:

1)   根节点的值是最大(最小)的,左右子树也是一个二叉堆。

2)   用数组来实现堆。当下标是i的时候,左孩 2*i+1,右孩2*i+2,父节点(i-1)/2,最后一个非叶节点 n/2-1(n是数组长度)

3)   堆的插入和删除,时间复杂度O(log n) ,构造一个堆的时间复杂度 O(N)

4)    构造一个堆的方法:从第一个非叶节点(n/2-1)开始,到0,挨个sink。 (时间复杂度O(N))

堆的详细

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值