zoukankan      html  css  js  c++  java
  • 利用栈实现二叉树的先序、中序、后序遍历

    先序:A->B->D->E->C->F->G

    function preTraverStack(root,cb){
        let stack = new Stack()
        stack.push(root)
        while(!stack.isEmpty()){
            let node = stack.pop()
            if(node.right != null){
                stack.push(node.right)
            }
            if(node.left != null){
                stack.push(node.left)
            }
            cb(node.val)
        }
    }
    

    中序:D->B->E->A->F->C->G

    function inorderTraverStack(root,cb){
        let stack = new Stack()
        stack.push(root)
        while(!stack.isEmpty()){
            while(stack.peek().left != null){
                stack.push(stack.peek().left)
            }
            while(!stack.isEmpty()){
                let node = stack.pop()
                cb(node.val)
                if(node.right != null){
                    stack.push(node.right)
                    break
                }
            }
        }
    }
    

    后序:D->E->B->F->G->C->A

    function postTraverStack(root,cb){
        let stack = new Stack()
        stack.push(root)
        let lastNode = null
        while(!stack.isEmpty()){
            while(stack.peek().left != null){
                stack.push(stack.peek().left)
            }
            while(!stack.isEmpty()){
                if(lastNode == stack.peek().right || stack.peek().right == null){
                    let node = stack.pop()
                    cb(node.val)
                    lastNode = node
                }else if(stack.peek().right != null){
                    stack.push(stack.peek().right)
                    break
                }
            }
        }
    }
    

      

  • 相关阅读:
    服务器响应状态码
    30
    29
    Java中参数始终是按值传递
    浅析 Java 中的继承和重写
    25
    super 关键字
    24
    Overriding
    23
  • 原文地址:https://www.cnblogs.com/zhenjianyu/p/13305132.html
Copyright © 2011-2022 走看看