一、二叉樹概念
二叉樹(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);