在二叉树这种数据结构中进行数据查找是最方便的,现在我们就对查找最小值、最大值和特定值进行一个梳理:
- 最小值: 最左子树的叶子节点
- 最大值: 最右子树的叶子节点
- 特定值: 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; } |
其实核心,仍然是通过一个循环和判断,来不断的向下去寻找,这里的思想其实和二分查找是有点类似的。