二叉树、二叉堆专题

[Q&A] 什么是二叉树?

百度百科词条

二叉树基本形态

1、空二叉树
2、一个根节点的二叉树
3、只有左子树的二叉树
4、只有右子树的二叉树
5、有二个子树的二叉树

[Q&A] 什么是 满二叉树?

百度百科词条
国内教程定义: 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。
国外(国际)定义: a binary tree T is full if each node is either a leaf or possesses exactly two childnodes.
大意为:如果一棵二叉树的结点要么是叶子结点,要么它有两个子结点,这样的树就是满二叉树。

国内满二叉树特征
1、总节点数:2^n-1(2的n次方-1)
2、第n层节点数: 2^(n-1)个节点(2的n-1次方)

在这里插入图片描述

[Q&A] 什么是 完全二叉树?

百度百科词条
一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树
在这里插入图片描述

如果对一棵有 n 个结点的完全二叉树的结点按层序编号(注意非下标,从1开始), 则对任一结点 i(1≤i≤n)
1、如果 i = 1, 则结点 i 是二叉树的根, 无双亲;
2、如果 i > 1, 则节点为叶子节点,其父结点parent(i) 为 i/2.
3、如果 2i > n, 则结点i无左孩子, 否则其左孩子lchild (i) 是结点 2i;
4、如果 2i+1 > n, 则结点i无右孩子, 否则其右孩子rchild (i) 是结点 2i+1.

二叉树【前中后】序遍历

三种遍历思想
前序遍历:根结点 —> 左子树 —> 右子树
中序遍历:左子树—> 根结点 —> 右子树
后序遍历:左子树 —> 右子树 —> 根结点
94. 二叉树的中序遍历
Java实现二叉树的前序,中序,后序遍历(迭代,递归两种方法实现)
动画演示+三种实现 94. 二叉树的中序遍历

[Q&A] 什么是 二叉堆?

可把一个无序的完全二叉树调整为二叉堆,它分为两个类型:
1.最大堆:任何一个父节点的值,都大于等于它左右孩子节点的值(堆顶值最大)
2.最小堆:任何一个父节点的值,都小于等于它左右孩子节点的值(堆顶值最小)

对于二叉堆,如下有几种操作:

1、插入节点 :插入位置是完全二叉树最后一个节点,然后逐层上浮。
2、删除节点 :删除位置是完全二叉树的堆顶的节点,然后把最后一个节点补到原本堆顶的位置,然后逐层下沉。
3、构建二叉堆:把一个无序的完全二叉树调整为二叉堆,本质上就是让所有非叶子节点依次下沉
漫画:什么是二叉堆?

如何存储

二叉堆虽是个完全二叉树,但其存储方式并不是链式存储,而是顺序存储,即存储在数组当中。

如果对一个有n个结点的完全二叉堆,
1、n=1表述二叉树有根。堆顶下标:0
2、假设已知左孩子下标是Lchild,则其父节点下标为 parent = (Lchild-1)/2.
3、假设已知右孩子下标是Rchild,则其父节点下标为 parent = (Rchild-1)/2.
4、假设已知父节点的下标是parent,则其左孩子下标为 2*parent+1;右孩子下标为 2*parent+2
5、针对节点 i (0≤i≤n-1) ,如果2i+1>n-1, 则结点i无左孩子, 否则其左孩子是结点2i+1;
6、针对节点 i (0≤i≤n-1) ,如果2i+2>n-1, 则结点i无右孩子, 否则其右孩子是结点2i+2.

如何构建最小堆?

堆排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值