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

Posted zwxo1

tags:

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

一、树结构本身是一种天然的组织结构

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

 

二、二叉树

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

  class Node

    E e;

    Node left;

    Node right;

  

二叉树(多叉树)

二叉树具有唯一根节点

  class Node

    E e;

    Node left;  <-- 左孩子  

    Node right;  <-- 右孩子

  

二叉树每个节点最多有两个孩子节点

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

 

二叉树具有天然递归结构

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

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

二叉树不一定是“满”的,

如 : 10  一个节点也是二叉树

NULL 空也是二叉树

 

三、二分搜索树(Binary Search Tree)

二分搜索树是二叉树

二分搜索树的每个节点的值:

  大于其左子树的所有节点的值

  小于其右子树的所有节点的值

每一棵子树也是二分搜索树

存储的元素必须有可比较性

 1 public class BST<E extends Comparable<E>> 
 2     
 3     private class Node 
 4         public E e;
 5         public Node left, right;
 6         
 7         public Node(E e) 
 8             this.e = e;
 9             left = null;
10             right = null;
11         
12     
13     
14     private Node root;
15     private int size;
16     
17     public BST()
18         root = null;
19         size = 0;
20     
21     
22     public int size()
23         return size;
24     
25     
26     public boolean isEmpty()
27         return size == 0;
28     
29     
30     // 向二分搜索树中添加新的元素e
31     public void add(E e)
32         if(null == root)
33             root = new Node(e);
34             size++;
35         else
36             add(root,e); // 待写
37         
38 
39         //size++;
40     
41 
42     
43     // 向以node为根的二分搜索树中插入元素e,递归算法
44     private void add(Node node, E e)
45         /*
46         if(null == node || node.e == e) // 注意区分 == 与 equals 的区别
47             node = new Node(e);
         size++;
48 return; 49 else if(node.e > e) 50 add(node.left,e); 51 else 52 add(node.right,e); 53 54 */ 55 if(e.equals(node.e)) 56 return; 57 else if(e.compareTo(node.e) < 0 && null == node.left) 58 node.left = new Node(e); 59 size++; 60 return; 61 else if(e.compareTo(node.e) > 0 && null == node.right) 62 node.right = new Node(e); 63 size++; 64 return; 65 66 67 if(e.compareTo(node.e) < 0 ) 68 add(node.left, e); 69 else 70 add(node.right, e); 71 72 73 74

 

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

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

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

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

数据结构AVL

数据结构AVL

二分搜索树(Binary Search Tree)