二叉樹的生成插入算法


一、二叉樹概念

二叉樹(binary tree)是一顆樹,其中每個節點都不能有多於兩個的兒子。

二叉樹的插入,在這里其實是對於一個二叉查找樹的插入。

使二叉樹成為二叉查找樹的性質是,對於樹中的每個節點X,它的左子樹中所有項的值小於X中的項目,而它的右子樹所有的項的值大於X中的項。

如下圖,兩顆都是二叉樹,左邊的樹是查找樹,右邊的樹則不是。右邊的樹在其項為6的節點(該節點正好是根節點)的左子樹中,有一個節點的項是7。

接下來我們要實現二叉樹的插入:

eg: 對於[ 2, 5, 4, 1, 3, 6]  => 

  

二、實現思路

  1.實例化node節點

  若根節點為空,便將newNode賦給root節點;

  若根節點存在,則插入新節點。

  2.插入左子樹或右子樹

  1) 如果newNode小於node

    1.如果node.left(左孩子)為空,newNode賦給node.left

    2.否則再次比較newNode < node.left 

  2) 如果newNode大於node

    1.如果node.right(右孩子)為空,newNode賦給node.right

    2.否則再次比較newNode> node.right

二、代碼實現

var nodes = [2, 5, 4, 1, 3, 6];
        
        var Node = function (key) {
            this.key = key;
            this.left = null;
            this.right = null;

        }
        let root = null;
        function insert(key) {
            let node = new Node(key);
            if (root == null)
                root = node;
            else
                insertNode(root, node);
        }
        function insertNode(root, node) {
            if (root.key > node.key) {
                if (root.left)
                    insertNode(root.left, node)
                else
                    root.left = node;
            }
            if (root.key < node.key) {
                if (root.right)
                    insertNode(root.right, node)
                else
                    root.right = node;
            }
        }
        nodes.forEach(function (key) {
            insert(key);
        })
    insert(0);
    console.log(root);

 


免責聲明!

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



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