【算法】二叉搜索树的构建和使用

107 阅读1分钟

问题: 有一万个数,写一个方法,进行查找。查找给定的数,返回存在还是不存在。
要求:尽可能的性能好。

什么是二叉搜索树?

首先这是一棵二叉树,
其次,它有排序效果,左子树的节点都比当前节点小,右子树的节点都比当前节点大

我们要通过以下 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 }
// 	}
// }