问题: 有一万个数,写一个方法,进行查找。查找给定的数,返回存在还是不存在。
要求:尽可能的性能好。
什么是二叉搜索树?
首先这是一棵二叉树,
其次,它有排序效果,左子树的节点都比当前节点小,右子树的节点都比当前节点大
我们要通过以下 8 个节点构建一棵二叉搜索树
首先,找出一个根节点
然后,根据“左子树的节点都比当前节点小,右子树的节点都比当前节点大”这条规则排放node
剩下的节点也都按照这个规则排放
var arr = [3, 5, 1, 6, 7, 2, 9, 8];
function Node(value) {
this.value = value;
this.left = null;
this.right = null;
}
function addNode(root, num) {
if(root == null) return;
if(root.value == num) return;
if(root.value < num) {
if(root.right == null) root.right = new Node(num);
else addNode(root.right, num);
}else {
if(root.left == null) root.left = new Node(num);
else addNode(root.left, num)
}
}
function buildSearchTree(arr) {
if(arr == null || arr.length == 0) return null;
let root = new Node(arr[0]);
for(let i = 1; i < arr.length; i ++) {
addNode(root, arr[i]);
}
return root;
}
let root = buildSearchTree(arr);
console.log(root)
// Node {
// value: 2,
// left: Node {
// value: 1,
// left: Node { value: 0, left: null, right: null },
// right: null
// },
// right: Node {
// value: 4,
// left: null,
// right: Node { value: 6, left: null, right: null }
// }
// }