二叉查找樹的實現(中序、前序、后序遍歷的實現)


二叉樹和二叉查找樹的區別:

二叉樹:每個節點的子節點不允許超過兩個。 

二叉查找樹:每個節點的子節點不允許超過兩個,同時相對較小的值保存在左節點中, 較大的值保存在右節點中。

關於中序、前序、后序遍歷的理解:

  以從整體角度到分支的角度進行考慮,假設一個小的二叉查找樹有三個節點,父節點、左子節點、右子節點,中序遍歷是左子節點、父節點、右子節點;前序是父節點、左子節點、右子節點;后序是左子節點、右子節點、父節點。

    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;
    }
    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 inOrder(node) {
        if (node != null) {
            inOrder(node.left);
            document.write(node.show() + " ");
            inOrder(node.right);
        }
    }
    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);
    document.write("Inorder traversal: " + "<br />");
    inOrder(nums.root);
    document.write("<br />");

    function preOrder(node) {
        if (node != null) {
            document.write(node.show() + " ");
            preOrder(node.left);
            preOrder(node.right);
        }
    }
    document.write("Preorder traversal: " + "<br />");
    preOrder(nums.root);
    document.write("<br />");

    function postOrder(node) {
        if (node != null) {
            postOrder(node.left);
            postOrder(node.right);
            document.write(node.show() + " ");
        }
    }
    document.write("Postorder traversal: " + "<br />");
    postOrder(nums.root);
    /*上述程序運行結果為:
    Inorder traversal: 
    3 16 22 23 37 45 99 
    Preorder traversal: 
    23 16 3 22 45 37 99 
    Postorder traversal: 
    3 22 16 37 99 45 23 */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM