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>
二叉搜索树的创建和查找

 

posted @ 2020-06-27 12:50  lanshanxiao  阅读(391)  评论(0编辑  收藏  举报