二叉树的生成插入算法

一、二叉树概念

二叉树(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);

 

posted @ 2020-03-08 11:30  ahaMOMO  阅读(970)  评论(0编辑  收藏  举报