美文网首页
二叉树的插入、查找、删除数据,获取最大值、最小值

二叉树的插入、查找、删除数据,获取最大值、最小值

作者: hui树 | 来源:发表于2020-02-02 17:13 被阅读0次

      class Node {

            constructor(key) {

                this.key = key;

                this.left = null;

                this.right = null;

            }

        }

        class BinaryTree{

            constructor() {

                this.root = null;

            }

            insert(key) {    // 插入数据

                var newNode = new Node(key);

                if (this.root == null) {

                    this.root = newNode;

                } else {

                    var current = this.root;

                    while( true) {

                        if (key < current.key) {

                            if (current.left) {

                                current = current.left;

                            } else {

                                current.left = newNode;

                                break;

                            }

                        } else if (key > current.key) {

                            if (current.right) {

                                current = current.right;

                            } else {

                                current.right = newNode;

                                break;

                            }

                        }

                    }

                }

            }

            getMin(node) {                // 获取二叉树的最小值

                node = node || this.root;

                while (node.left != null) {

                    node = node.left;

                }

                return node.key;

            }

            getMax(node) {                //获取二叉树最大值

                node = node || this.root;

                while (node.right != null) {

                    node = node.right;

                }

                return node.key;

            }

            find(key) {              // 查找 给定的值

                var node = this.root;

                while ( node != null) {

                    if (key < node.key) {

                        node = node.left;

                    } else if (key > node.key) {

                        node = node.right;

                    } else {

                        return node;

                    }

                }

                return null;

            }

            remove(key) {        // 删除给定的值

                this.root = this.removeNode(this.root, key);

            }

            removeNode(node, key) {      // 真正删除的函数

                if (node == null) {

                    return  null;

                }

                if (key < node.key) {

                    node.left = this.removeNode(node.left, key);

                    return node;

                } else if (key > node.key) {

                    node.right = this.removeNode(node.right, key);

                    return node;

                } else {

                    if (node.left == null && node.right == null) {

                        node = null;

                        return node;

                    } else if (node.left == null) {

                        return node.right;

                    } else if (node.right == null) {

                        return node.left;

                    } else {

                        var minNode = this.getMin(node.right);

                        node.key = minNode.key;

                        node.count = minNode.count;

                        node.right = this.removeNode(node.right, minNode.key);

                        return node;

                    }

                }

            }

        }

    相关文章

      网友评论

          本文标题:二叉树的插入、查找、删除数据,获取最大值、最小值

          本文链接:https://www.haomeiwen.com/subject/fweqxhtx.html