玩转数据结构:第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; } }
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); } }
6-4 改进添加操作:深入理解递归终止条件
以上是关于玩转数据结构:第6章 二分搜索树的主要内容,如果未能解决你的问题,请参考以下文章