标签:存在 lan new char init javascrip var onclick isp
创建一个二叉搜索树,并且从创建的二叉搜索树中查找是否存在某个值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function Node(value){
this.value = value;
this.left = null;
this.right = null;
}
//二叉搜索树:是一棵二叉树,左子树的节点值都比当前节点值小,右子树的节点值都比当前节点值大。
function buildSearchTree(arr){
if(arr == null || arr.length == 0) return null;
var root = new Node(arr[0]);//把数组第一个数当做根节点
for(var i = 0; i < arr.length; i++){//循环数组,创建二叉搜索树
addNode(root, arr[i]);
}
return root;
}
//添加节点
function addNode(root, value){
if(root == null) return null;//root为null,直接返回
if(root.value == value) return null;//值相等,说明已有该节点
if(root.value > value){//小于,则往左子树上添加
if(root.left == null){//左节点没值,添加节点
root.left = new Node(value);
}else{
addNode(root.left, value);
}
}else{//大于,往右子树上添加
if(root.right == null){//右节点没值,添加节点
root.right = new Node(value);
}else{
addNode(root.right, value);
}
}
}
//测试,创建一个二叉搜索树
var arr = [9,3,5,4,6,2,7,1,8];
var tree = buildSearchTree(arr);
console.log(tree);
//从二叉搜索树中查找某个值
function searchTree(root, value){
if(root == null) return false;
if(root.value == value) return true;
if(root.value > value){//小于,往左子树上查找
return searchTree(root.left, value);
}else{//大于,往右子树上查找
return searchTree(root.right, value);
}
}
//测试,查找二叉搜索树是否存在4
console.log(searchTree(tree, 4));
</script>
</body>
</html>
标签:存在 lan new char init javascrip var onclick isp
原文地址:https://www.cnblogs.com/lanshanxiao/p/13198037.html