二叉树是我们经常会用到的一种数据结构,在我们日常刷题和编程中都有很大的用处,本篇讲一下我所了解的二叉树的相关知识。
满二叉树
满二叉树:
在不增加层数的前题下,无法再增加一个节点的二叉树
一个二叉树只有度为0和度为2的结点,且度为0的结点都在同一条线上,这种二叉树就叫做满二叉树。
图例:
完全二叉树
如果只是删除了满二叉树最底层最右的连续若干个结点,这样形成的二叉树就是完全二叉树
二叉排序树
二叉排序树:
如果左子树不为空,那么左子树上所有的节点的值都小于根节点
如果右子树不为空,那么右子树上所有的节点的值都大于根节点
左右子树都是二叉排序树
平衡二叉树(AVL)
它是一颗空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两颗子树都是一颗平衡二叉树。
平衡因子: 左子树的高度 - 右子树的高度
我们将平衡因子的绝对值小于1的的有序二叉树称为平衡二叉树
二叉树的存储
链式存储方式
采用链式存储用java可以这么表示
public class treeNode{
private int value;
private treeNode leftNode;
private treeNode rightNode;
}
顺序存储
顺序存储可以借助数组来实现
以上树为例,借助数组进行存储就是
据此我们还可以得到顺序存储的规律
根节点下标为 k那他的左孩子节点的下标就是2k 右孩子结点的下标为2k+1
二叉树的遍历
二叉树的遍历有两种
1.深度优先遍历
这个在我这篇博客里有
https://editor.csdn.net/md/?articleId=120377450
2.广度优先遍历
一层一层得遍历,层次遍历
对于这棵二叉树来说使用层次遍历就是
58 ->36->60->18->45->59->80