Javascript -- 二叉树(查找&&删除功能实现)

查找最大值

//查找最大值,根节点的右边比根节点的值大
var maxNode = function (node) {
    if (node) {
        //只要不为空,一直搜寻
        while (node && node.right !== null) {
            node = node.right;
        }
        return node.key;
    }
    return null;
}
this.max = function () {
    //最大值
    return maxNode(root);
}

测试

var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach(function (key) {
    binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
    console.log(key);
}
console.log("max node is:" + binaryTree.max());

查找最小值

//查找最小值,根节点左边值小
var minNode = function (node) {
    if (node) {
        //循环搜索
        while (node && node.left !== null) {
            node = node.left;
        }
        return node.key;
    }
    return null;
}
this.min = function () {
    //最小值
    return minNode(root);
}

测试

var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach(function (key) {
    binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
    console.log(key);
}
console.log("min node is:" + binaryTree.min());

查找指定数字

//查找具体的数值
var searchNode = function (node, key) {
    if (node == null) {
        //空树
        return false;
    }
    if (key < node.key) {
        //小于当前节点,在左子树搜索
        return searchNode(node.left, key);
    } else if (key > node.key) {
        //大于当前节点,在右子树搜索
        return searchNode(node.right, key);
    } else {
        //搜索成功
        return true;
    }
}
this.search = function (key) {
    //调用函数,返回所要搜索值
    return searchNode(root, key);
}

测试

var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach(function (key) {
    binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
    console.log(key);
}

console.log(binaryTree.search(7) ? "key 7 is found" : "key 7 is not found");
console.log(binaryTree.search(9) ? "key 9 is found" : "key 9 is not found");
console.log(binaryTree.search(13) ? "key 13 is found" : "key 13 is not found");

删除

//删除节点
var removeNode = function (node, key) {
    //空树
    if (node === null) {
        return null;
    }
    if (key < node.key) {
        //左子树进行搜索查找
        node.left = removeNode(node.left, key);
        return node;
    } else if (key > node.key) {
        //右子树进行搜索查找
        node.right = removeNode(node.right, key);
        return node;
    } else {
        //未找到
        if (node.left === null && node.right === null) {
            node = null;
            return node;
        }
    }
}
this.remove = function (key) {
    root = removeNode(root, key);
}

测试

var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach(function (key) {
    binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
    console.log(key);
}
binaryTree.remove(1);
binaryTree.postOrderTraverse(callback);

删除值为 1 的节点,后序排列输出二叉树查看删除结果。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值