码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-02-23 20:26:55      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:ret   二分搜索   nts   boolean   node   sed   one   有一个   new   

二分搜索树


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章 二分搜索树

标签:ret   二分搜索   nts   boolean   node   sed   one   有一个   new   

原文地址:https://www.cnblogs.com/MarlonKang/p/12351177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!