前端面试题之手写二叉排序树

前端面试题之手写二叉排序树

二叉排序树:每个节点的左节点都比根节点小,右节点都比根节点大

function TreeNode(data, left, right) { //节点结构
    this.val = data;
    this.left = left;
    this.right = right;
}

function BST() { //二叉树构造函数
    this.root = null; //默认是一颗空树
    this.insert = function (data) { //添加节点功能
        var newNode = new TreeNode(data, null, null); //首先构造一个二叉树节点
        if(!this.root) { //如果是一个空树(空树根节点是null),直接把这个节点变成根节点
            this.root = newNode;
        }else {
            this.insertNode(this.root, newNode) //不是空树的情况
        }
    };
    this.insertNode = function (root, newNode) {
    //首先判断将要加入的节点和目前节点的大小
        if(newNode.val < root.val) { //如果比节点小
            if(root.left === null) { //如果节点的左边是null
                root.left = newNode; //直接添加到做节点
                return; //返回
            }
            this.insertNode(root.left, newNode); //如果节点的左边不是空的(左边已经存在节点了),那就把左边的节点作为根节点递归
        }else { //如果比节点大
            if(root.right === null) { //如果节点的右边是null
                root.right = newNode; //直接添加到做节点
                return; //返回
            }
            this.insertNode(root.right, newNode); //如果节点的右边不是空的(左边已经存在节点了),那就把左边的节点作为根节点递归
        }
        //递归到最后找到为null的结点把它添加就完事
    }
}

var bst = new BST();
bst.insert(12);
bst.insert(5);
bst.insert(17);
bst.insert(4);
bst.insert(6);
bst.insert(30);
console.log(bst);

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq593249106/article/details/83245693
今日推荐