查找算法之——二叉查找树(图文分析)

 一、数据结构

二叉查找树基于二叉树,每个节点储存着键和值,以及指向左右子树的链接,一颗二叉查找树代表了一组键值对的集合,类似于python中的字典(字典中的键值对储存是无序的)。在这里我们规定节点左子树中的节点的键都小于它,右子树中的节点都大于它,如果我们将所有节点向下投影到一条线上,可以得到一条有序的序列。

 

 

二、主要方法(默认为递归实现)

部分方法的迭代实现在末尾展示

 

1、查找和排序

在符号表中查找一个键,从根节点开始,如果节点的键和被查找的键相等,就返回节点的值,如果节点的值大于被查找的键的值,就在节点的左子树中查找,反之在右子树中查找,直到节点为空或查找命中。如果键在符号表中则查找命中,返回键对应的值,如果键不在符号表中则未命中,返回null(null为指向一个它可能会存在的空节点的链接)

 

在上一篇结尾处引入的方法有许多都用到了这个算法:

复制代码
 1 public Value get(Key key) {// 通过键从符号表中获取对应的值,返回键key对应的值  2         return get(root, key);  3     }  4   5     private Value get(Node x, Key key) {// 递归  6         if (key == null) {  7             return null;  8         }  9         int cmp = key.compareTo(x.key); 10         if (cmp < 0) { 11             return get(x.left, key); 12         } else if (cmp > 0) { 13             return get(x.right, key); 14         } else 15             return x.val; 16     } 17  18  19     public void put(Key key, Value val) {//修改或添加节点 20         root = put(root, key, val); 21     } 22  23     private Node put(Node x, Key key, Value val) { 24         if (x == null) {// 创建新节点 25             return new Node(key, val, 1); 26 
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信