二叉树的生成插入算法
一、二叉树概念
二叉树(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);