在二叉树这种数据结构中进行数据查找是最方便的,现在我们就对查找最小值、最大值和特定值进行一个梳理:

  • 最小值: 最左子树的叶子节点
  • 最大值: 最右子树的叶子节点
  • 特定值: target与current进行比较,如果比current大,在current.right进行查找,反之类似。

清楚思路后,就动手来写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//最小值
function getMin(bst) {
    var current = bst.root;
    while(current.left !== null) {
        current = current.left;
    }
    return current.data;
}

//最大值
function getMax(bst) {
    var current = bst.root;
    while(current.right !== null) {
        current = current.right;
    }
    return current.data;
}

最大、最小值都是非常简单的,下面主要看下如何通过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function find(target,bst) {
    var current = bst.root;
    while(current !== null) {
        if(target === current.data) {
            return true;
        }
        else if(target > current.data) {
            current = current.right;
        } else if(target < current.data) {
            current = current.left;
        }
    }
    return -1;
}

其实核心,仍然是通过一个循环和判断,来不断的向下去寻找,这里的思想其实和二分查找是有点类似的。