Javascript Algorithm Tree Binary Tree in-order Traversal Iterative

Description

Javascript Algorithm Tree Binary Tree in-order Traversal Iterative

function inorderTraversalIterative(root){
     /**//from   w  w  w . j a v a  2s  .  c  o m
     * Node:{val:number,left:Node,right:Node}
     * sample input
     * var tree={ val:"F",
     *                 left:{ val:"B",
     *                        left:{ val:"A" },
     *                                right:{ val:"D",
     *                                          left:{val:"C"},
     *                                          right:{val:"E"}
     *                              }
     *                      },
     *                right:{val:"G",
     *                         right:{ val:"I",
     *                                   left:{val:"H"}
     *                                 }
     *                       }
     *   };
     */
   function peek(stack){
       return stack[stack.length-1];
   }
   
   var  stack = [root],
        output = [],top;
      
   while(stack.length>0){
       while(peek(stack).left){
           stack.push(peek(stack).left);
       }
       output.push(peek(stack).val);
       // backup to parent which has a right child
       while((top=stack.pop()) && !top.right){
           if(stack.length>0){
               output.push(peek(stack).val);
           }
       }
       // if parent was found, then push its right child
       if(top){
           stack.push(top.right);
       }
   }

   return output;
}

var tree={ val:"F",
           left:{ val:"B",
                  left:{ val:"A" },
                  right:{ val:"D",
                          left:{val:"C"},
                          right:{val:"E"}
                        }
                 },
           right:{val:"G",
                  right:{ val:"I",
                          left:{val:"H"}
                        }
                 }
         };


var tree2 = {
             val:34,
             left:{
                 val:2,
                 left:{
                     val:0   // leaf
                 },
                 right:{
                     val:6,
                     left:{
                         val:5,
                         right:{
                             val:6  // leaf
                         }
                     },right:{
                         val:12,
                         left:{
                             val:7 // leaf
                         },
                         right:{
                             val:23 // leaf
                         }
                     }
                 }
             },
             right:{
                 val:45,
                 left:{
                     val:43 // leaf
                 },
                 right:{
                     val:78,
                     left:{
                         val:67 //leaf
                     },
                     right:{
                         val:89 // leaf
                     }
                 }
             }
};
console.log(inorderTraversalIterative(tree));



PreviousNext

Related