JavaScript中利用二叉樹對陣列進行排序
阿新 • • 發佈:2018-11-12
二叉樹和二叉搜尋樹
二叉樹中的節點最多隻能有兩個子節點:一個是左側子節點,另一個是右側子節點。
二叉搜尋樹(BST)是二叉樹中的一種,但是它只允許在左側節點儲存比父節點小的值,在右側幾點儲存比節點大(或相等)的值。
可以利用BST的這種特性,對陣列進行排序:
class Node{ constructor(key){ this.key = key; this.left = null; this.right= null; } } class BinarySearchTree{ constructor(){ this.root = null; this.length = 0; } insert(key){ const node = new Node(key); const insertNode = (root, node) => { if(root.key>node.key){ root.left ? insertNode(root.left, node) : root.left = node; }else { root.right ? insertNode(root.right, node) : root.right = node; } } if(this.root){ insertNode(this.root, node); }else { this.root = node; } this.length++; return this; } // 二叉樹中序遍歷 middleOrderTree(){ var result = []; const middleOrder = (root) => { root.left && middleOrder(root.left); result.push(root.key); root.right && middleOrder(root.right); return result; }; return middleOrder(this.root); } arrayToTree(arr){ for(var i=0;i<arr.length;i++){ this.insert(arr[i]); } return this; } }
二叉樹共有三種遍歷方法:
先序遍歷:節點本身–>左側子節點–>右側子節點
中序遍歷:左側子節點–>節點本身–>右側子節點
後序遍歷:左側子節點–>節點本身–>右側子節點