git & 樹結構

weixin_34393428發表於2018-02-26

樹是一種分層資料的抽象模型。

4479155-c54f5e2ed735b9f1.png
image.png

4479155-573424a43dfccb27.png
image.png

二叉樹

二叉樹的節點最多隻能有兩個節點。

二叉樹搜尋樹

二叉搜尋樹是二叉樹的一種,左側子節點儲存(父節點)小的值,右側子節點儲存(比父節點大或者等於)的值

function BinarySearchTree() {

    var Node = function(key){
        this.key = key;
        this.left = null;
        this.right = null;
    };

    var root = null;

    this.insert = function(key){

        var newNode = new Node(key);

        if (root === null){
            root = newNode;
        } else {
            insertNode(root,newNode);
        }
    };

    var insertNode = function(node, newNode){
        if (newNode.key < node.key){
            if (node.left === null){
                node.left = newNode;
            } else {
                insertNode(node.left, newNode);
            }
        } else {
            if (node.right === null){
                node.right = newNode;
            } else {
                insertNode(node.right, newNode);
            }
        }
    };

    this.getRoot = function(){
        return root;
    };

    this.search = function(key){

        return searchNode(root, key);
    };

    var searchNode = function(node, key){

        if (node === null){
            return false;
        }

        if (key < node.key){
            return searchNode(node.left, key);

        } else if (key > node.key){
            return searchNode(node.right, key);

        } else {
            return true;
        }
    };

    this.inOrderTraverse = function(callback){
        inOrderTraverseNode(root, callback);
    };

    var inOrderTraverseNode = function (node, callback) {
        if (node !== null) {
            inOrderTraverseNode(node.left, callback);
            callback(node.key);
            inOrderTraverseNode(node.right, callback);
        }
    };

    this.preOrderTraverse = function(callback){
        preOrderTraverseNode(root, callback);
    };

    var preOrderTraverseNode = function (node, callback) {
        if (node !== null) {
            callback(node.key);
            preOrderTraverseNode(node.left, callback);
            preOrderTraverseNode(node.right, callback);
        }
    };

    this.postOrderTraverse = function(callback){
        postOrderTraverseNode(root, callback);
    };

    var postOrderTraverseNode = function (node, callback) {
        if (node !== null) {
            postOrderTraverseNode(node.left, callback);
            postOrderTraverseNode(node.right, callback);
            callback(node.key);
        }
    };

    this.min = function() {
        return minNode(root);
    };

    var minNode = function (node) {
        if (node){
            while (node && node.left !== null) {
                node = node.left;
            }

            return node.key;
        }
        return null;
    };

    this.max = function() {
        return maxNode(root);
    };

    var maxNode = function (node) {
        if (node){
            while (node && node.right !== null) {
                node = node.right;
            }

            return node.key;
        }
        return null;
    };

    this.remove = function(element){
        root = removeNode(root, element);
    };

    var findMinNode = function(node){
        while (node && node.left !== null) {
            node = node.left;
        }

        return node;
    };

    var removeNode = function(node, element){

        if (node === null){
            return null;
        }

        if (element < node.key){
            node.left = removeNode(node.left, element);
            return node;

        } else if (element > node.key){
            node.right = removeNode(node.right, element);
            return node;

        } else { 

   

        
            if (node.left === null && node.right === null){
                node = null;
                return node;
            }

       
            if (node.left === null){
                node = node.right;
                return node;

            } else if (node.right === null){
                node = node.left;
                return node;
            }

         
            var aux = findMinNode(node.right);
            node.key = aux.key;
            node.right = removeNode(node.right, aux.key);
            return node;
        }
    };
}

GIT

1、這周git上遇到了一些問題,假期裡把Git公共鑰匙 給 重置了 導致 pull push 程式碼沒有許可權,之前在github gitlab 碼雲這些程式碼託管網站上 是圖形化配置公匙,由於公司git倉庫是自己伺服器部署的,所以需要登入伺服器 把公匙配置進去 ,/home/git/.ssh/authorized_keys

2、還有一個就是測試環境程式碼 push git倉庫後,雖然 遠端git倉庫更新了程式碼但是實際應用的目錄下程式碼沒有更新,後來用git 命令 push 程式碼的時候發現了報錯(圖形化下看的完全沒有問題),發現有個檔案衝突了(不是程式碼檔案),需要刪除或者移除(為什麼不去更新這個檔案)。解決問題的同時 深刻理解了 git hooks的作用,自動部署 要加強學習了。

相關文章