总结树

Posted muacheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结树相关的知识,希望对你有一定的参考价值。

一.二叉树

1.满二叉树

高度为h,由2的h次-1个节点构成的二叉树称为满二叉树

2.完全二叉树

高度为h,除第h层外,其它各层节点数都到达最大节点数。且第h层的节点都连续集中在最左边

二.二叉查找树

又称二叉排序树或二叉搜索树。左子树的所有节点值均小于根节点的值,右子树所有节点值均大于根节点的值。且左右子树也分别为二叉排序树。
1.插入操作
(1) 若当前的二叉查找树为空,则插入的元素为根节点
(2) 若插入的元素值小于根节点值,则将元素插入到左子树中
(3) 若插入的元素值不小于根节点值,则将元素插入到右子树中

class Node {
    int key;
    int value;
    Node leftChild;
    Node rightChild;

    public Node(int key, int value) {
        this.key = key;
        this.value = value;
    }

}

public void insert(int key, int value) {
        if (root == null) {
            root = new Node(key, value);
            return;
        }
        Node currentNode = root;
        Node parentNode = root;
        boolean isLeftChild = true;
        while (currentNode != null) {
            parentNode = currentNode;
            if (key < currentNode.key) {
                currentNode = currentNode.leftChild;
                isLeftChild = true;
            } else {
                currentNode = currentNode.rightChild;
                isLeftChild = false;
            }
        }
        Node newNode = new Node(key, value);
        if (isLeftChild) {
            parentNode.leftChild = newNode;
        } else {
            parentNode.rightChild = newNode;
        }
}

2.查找操作

public Node find(int key) {
        Node currentNode = root;
        while (currentNode != null && currentNode.key != key) {
            if (key < currentNode.key) {
                currentNode = currentNode.leftChild;
            } else {
                currentNode = currentNode.rightChild;
            }
        }
        return currentNode;
}

三.平衡二叉树

对于一颗二叉查找树,其期望高度是log2n(树平衡时),时间复杂度o(log2n)。但是在某些极端情况下,如插入时的序列是有序时,这时将退化成一条链,这时将退化为线性,复杂度将变为n。于是就有了平衡二叉树。

平衡二叉树:左右两个子树的高度差绝对值不超过1.并且左右两个子树都是平衡二叉树。平衡二叉树的常用算法有红黑树、AVL树等。

1.平衡二叉树之AVL树

AVL树得名于它的发明者 G.M. Adelson-Velsky。左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。查找、插入和删除在平均和最坏情况下都是O(logn)。

2.平衡二叉树之红黑树

从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。结果是这个树大致上是平衡的。

3.AVL和红黑树的区别

(1)红黑树放弃了追求完全平衡,追求大致平衡,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单
(2)平衡二叉树追求绝对平衡,条件比较苛刻,旋转的次数无法预知
(3)如果是增删操作多的话,用红黑树。如果是查询操作多的话,用avl树

四.B树

B树和平衡二叉树稍有不同的是B树属于多叉树又名平衡多路查找树。数据库索引技术里大量使用者B树和B+树的数据结构







以上是关于总结树的主要内容,如果未能解决你的问题,请参考以下文章

BootStrap实用代码片段(持续总结)

回归 | js实用代码片段的封装与总结(持续更新中...)

查看发票组代码后的总结和有感

VsCode 代码片段-提升研发效率

平衡树代码总结

Python学习总结