1. 程式人生 > >JavaScript中利用二叉樹對陣列進行排序

JavaScript中利用二叉樹對陣列進行排序

二叉樹和二叉搜尋樹

二叉樹中的節點最多隻能有兩個子節點:一個是左側子節點,另一個是右側子節點。
二叉搜尋樹(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;
    }
}

二叉樹共有三種遍歷方法:
先序遍歷:節點本身–>左側子節點–>右側子節點
中序遍歷:左側子節點–>節點本身–>右側子節點
後序遍歷:左側子節點–>節點本身–>右側子節點