zoukankan      html  css  js  c++  java
  • 二叉查找树(查找最大值、最小值、给定值、删除给定值的实现)

        function Node(data, left, right) {
            this.data = data;
            this.left = left;
            this.right = right;
            this.show = show;
        }
        function show() {
            return this.data;
        }
        function BST() {
            this.root = null;
            this.insert = insert;
            this.getMin = getMin;
            this.getMax = getMax;
            this.find = find;
            this.remove = remove;
        }
        function insert(data) {
            var n = new Node(data, null, null);
            if (this.root == null) {
                this.root = n;
            } else {
                var current = this.root;
                var parent;
                while (true) {
                    parent = current;
                    if (data < current.data) {
                        current = current.left;
                        if (current == null) {
                            parent.left = n;
                            break;
                        }
                    } else {
                        current = current.right;
                        if (current == null) {
                            parent.right = n;
                            break;
                        }
                    }
                }
            }
        }
        function getMin() {
            var current = this.root;
            while (current.left != null) {
                current = current.left;
            }
            return current.data;
        }
        function getMax() {
            var current = this.root;
            while (current.right != null) {
                current = current.right;
            }
            return current.data;
        }
        var nums = new BST();
        nums.insert(23);
        nums.insert(45);
        nums.insert(16);
        nums.insert(37);
        nums.insert(3);
        nums.insert(99);
        nums.insert(22);
        var min = nums.getMin();
        document.write("The minimum value of the BST is: " + min);
        document.write("<br />");
        var max = nums.getMax();
        document.write("The maximum value of the BST is: " + max);
        document.write("<br />");
    
        function find(data) {
            var current = this.root;
            while (current != null) {
                if (current.data == data) {
                    return current;
                } else if (data < current.data) {
                    current = current.left;
                } else {
                    current = current.right;
                }
            }
            return null;
        }
        var s = 99;
        var found = nums.find(s);
        if (found != null) {
            document.write("Found " + s + " in the BST.");
        } else {
            document.write(s + " was not found in the BST.");
        }
        document.write("<br />");
    
        function getSmallest(node) {//查找最小节点  
            while (node.left != null) {
                node = node.left;
            }
            return node;
        }
        function remove(data) {
            root = removeNode(this.root, data);
        }
        function removeNode(node, data) {
            if (node == null) {
                return null;
            }
            if (data == node.data) {
                if (node.left == null && node.right == null) {
                    return null;
                }
                if (node.left == null) {
                    return node.right;
                }
                if (node.right == null) {
                    return node.left;
                }
                var tempNode = getSmallest(node.right);//查找待删节点右子树上的最小值
                node.data = tempNode.data;//将待删节点右子树上的最小值赋值给待删除节点
                node.right = removeNode(node.right, tempNode.data);//删除待删节点右子树上的最小值
                return node;
            } else if (data < node.data) {
                node.left = removeNode(node.left, data);
                return node;
            } else {
                node.right = removeNode(node.right, data);
                return node;
            }
        }
        nums.remove(99);
        function inOrder(node) {
            if (node != null) {
                inOrder(node.left);
                document.write(node.show() + " ");
                inOrder(node.right);
            }
        }
        document.write("Inorder traversal: " + "<br />");
        inOrder(nums.root);
        /*上述程序运行结果如下:
        The minimum value of the BST is: 3
        The maximum value of the BST is: 99
        Found 99 in the BST.
        Inorder traversal: 
        3 16 22 23 37 45 */
  • 相关阅读:
    3.4.2内核下的I2C驱动
    AS3批量替换文件
    文件访问权限
    Windows快捷键
    整数与字符串之间的转换函数
    Windows获取文件大小
    Windows内核对象
    ASCII字符集
    IP协议
    获取真正的进程/线程句柄
  • 原文地址:https://www.cnblogs.com/feile/p/5391767.html
Copyright © 2011-2022 走看看