欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构中的各种树总结

程序员文章站 2022-07-12 22:30:26
...

虽然学习了数据结构,但是在平时学习中,发现自己对一些树的基本概念经常混淆,这里进行记录总结。这里只是总结一些基本的概念。

大顶堆和小顶堆

无论是大顶堆还是小顶堆,它的前提条件是:首先是一个完全二叉树

  • 大顶堆:任意非叶子结点的值都大于等于子结点的值。 java中创建大顶堆

  • 小顶堆:任意非叶子结点的值都小于等于子结点的值。

java中默认创建的是小顶堆。大顶堆创建如下:

//创建一个包含k个元素的大顶堆
Queue<Integer> heap = new PriorityQueue<>(k, (i1, i2) -> 
Integer.compare(i2, i1)); 
//创建一个包含k个元素的小顶堆
Queue<Integer> heap1 = new PriorityQueue<>(k); 

完全二叉树

一颗深度为k二叉树,有n个节点,对这棵树进行编号,如果所有的编号都和满二叉树对应,那么这棵树是完全二叉树。

数据结构中的各种树总结
上图是完全二叉树。以下图都不是完全二叉树。
数据结构中的各种树总结
数据结构中的各种树总结
以上图片来自https://blog.csdn.net/weixin_42096624


平衡二叉树

平衡二叉树,又称左AVL树。AVL树满足以下条件:

AVL树或者是一棵空树,或者是具有下列性质的非空二叉搜索树:

(1) 任一结点的左、右子树均为AVL树

(2) 根结点左、右子树高度差绝对值不超过1

注意:根据定义可以看到AVL树并不要求左右子树结点值和父结点结点值的大小关系。


二插搜索树

二叉搜索树,又称二叉排序树。英文为Binary Search Tree,Binary Sort Tree,简写为BST。它既然是搜索树,那肯定是为了提高查找效率而产生的。

BST的定义如下:

1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

2. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

3. 任意节点的左、右子树也分别为二叉查找树。

4. 没有键值相等的结点。

这里要注意2点:

  • BST树它是要求左右子树结点值和父结点值得大小符合上述规律的(可以这么理解:为了便于搜索);
  • 所有结点的键值都不重复