二叉树

2019-01-14  本文已影响0人  __越过山丘__

https://juejin.im/entry/59c3be3e6fb9a00a571d39e4

// 二叉树
function BinaryTree(key){
   let Node = function(key){
       this.key = key;
       this.left = null;
       this.right = null;
   }

   let root = null;

   let 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.insert = function(key){
       let newNode = new Node(key);
       if (root === null){
           root = newNode;
       } else {
           insertNode(root, newNode);
       }
   }

   // 中序遍历
   let inOrderTraverseNode = function(node, callback){
       if ( node !== null ){
            inOrderTraverseNode(node.left, callback);
            callback(node.key);
            inOrderTraverseNode(node.right, callback);
       }
   }

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

   // 前序遍历
   let preOrderTraverseNode = function(node, callback) {
       if ( node != null ){
            callback(node.key);
            preOrderTraverseNode(node.left, callback);
            preOrderTraverseNode(node.right, callback);
       }
   }

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

   // 后序遍历

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

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


let nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
let binaryTree = new BinaryTree();

nodes.forEach(function(key){
     binaryTree.insert(key);
})


// 二叉树的遍历方法:1. 中序遍历 2. 前序遍历 3. 后序遍历


// 中序遍历
// let callback = function(key){
//    console.log(key);
// }

// binaryTree.inOrderTraverse(callback);

// 前序遍历
// let callback = function(key){
//     console.log(key)
// }

// binaryTree.preOrderTraverse(callback);

// 后序遍历
let callback = function(key){
    console.log(key);
}

binaryTree.postOrderTraverse(callback);
上一篇 下一篇

猜你喜欢

热点阅读