11.二叉搜索树的创建和查找(JavaScript版)
创建一个二叉搜索树,并且从创建的二叉搜索树中查找是否存在某个值
<!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>