玩转数据结构:第6章 二分搜索树

Posted marlonkang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩转数据结构:第6章 二分搜索树相关的知识,希望对你有一定的参考价值。

二分搜索树


6-1 为什么要研究树结构

树结构

技术图片

为什么要有树结构?

  • 树结构本身是一种天然的组织结构
  • 高效

 技术图片

将数据使用树结构存储后,出奇的高效。

  • 二分搜索树(Binary Search Tree)
  • 平衡二叉树:AVL;红黑树
  • 堆;并查集
  • 线段树;Trie(字典树,前缀树)

6-2 二分搜索树基础

和链表一样,动态数据结构。

二叉树,具有天然递归结构。

  • 每个节点的左子树也是二叉树
  • 每个节点的右子树也是二叉树

技术图片

  •  二叉树每个节点最多有一个父亲

二分搜索树 Binary Search Tree

二分搜索树是二叉树

技术图片

二分搜索树,存储的元素必须有可比较性。

BST.java

技术图片
public class BST<E extends Comparable<E>> {

    private class Node {
        public E e;
        public Node left, right;

        public Node(E e) {
            this.e = e;
            left = null;
            right = null;
        }
    }

    private Node root;
    private int size;

    public BST(){
        root = null;
        size = 0;
    }

    public int size(){
        return size;
    }

    public boolean isEmpty(){
        return size == 0;
    }
}
View Code

6-3 向二分搜索树中添加元素

03-Add-Elements-in-BST

BST.java

技术图片
public class BST<E extends Comparable<E>> {

    private class Node {
        public E e;
        public Node left, right;

        public Node(E e) {
            this.e = e;
            left = null;
            right = null;
        }
    }

    private Node root;
    private int size;

    public BST(){
        root = null;
        size = 0;
    }

    public int size(){
        return size;
    }

    public boolean isEmpty(){
        return size == 0;
    }

    // 向二分搜索树中添加新的元素e
    public void add(E e){

        if(root == null){
            root = new Node(e);
            size ++;
        }
        else
            add(root, e);
    }

    // 向以node为根的二分搜索树中插入元素e,递归算法
    private void add(Node node, E e){
        if(e.equals(node.e))
            return;
        else if(e.compareTo(node.e) < 0 && node.left == null){
            node.left = new Node(e);
            size ++;
            return;
        }
        else if(e.compareTo(node.e) > 0 && node.right == null){
            node.right = new Node(e);
            size ++;
            return;
        }

        if(e.compareTo(node.e) < 0)
            add(node.left, e);
        else //e.compareTo(node.e) > 0
            add(node.right, e);
    }
}
View Code

6-4 改进添加操作:深入理解递归终止条件

以上是关于玩转数据结构:第6章 二分搜索树的主要内容,如果未能解决你的问题,请参考以下文章

玩转数据结构5之二分搜索树(学习笔记)

玩转数据结构——二分搜索树基础

九章算法第二天,二分搜索

第二十六篇 玩转数据结构——二分搜索树

06-二分搜索树 BST

6-1 为什么要研究树结构 6-2 二分搜索树基础