zoukankan      html  css  js  c++  java
  • JZ59 按之字形顺序打印二叉树

    按之字形顺序打印二叉树

    请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

     
    思路:最暴力的方法就是使用队列进行层次遍历,使用sz存储每层的节点个数。然后反转偶数层就可以了。
    优化方法:使用两个栈,一个栈存奇数层的结果,按照先左孩子节点后右孩子节点的方式压栈。另一个栈存偶数层的结果,按照先右孩子节点再左孩子结点的方式压栈。
     
    func Print(pRoot *TreeNode) [][]int {
        var res [][]int
        if pRoot == nil {
            return res
        }
        
        var odd, even []*TreeNode
        odd = append(odd, pRoot)
        for len(odd) != 0 || len(even) != 0 {
            var tmp *TreeNode 
            var vtmp []int
            for len(odd) != 0 {
                tmp = odd[len(odd)-1]
                odd = odd[:len(odd)-1]
                vtmp = append(vtmp, tmp.Val)
                if tmp.Left != nil {
                    even = append(even, tmp.Left)
                }
                if tmp.Right != nil {
                    even = append(even, tmp.Right)
                }
                
            }
            if len(vtmp) !=0 {
                res = append(res, vtmp)
            }
            
            vtmp = nil
            for len(even) != 0 {
                tmp = even[len(even)-1]
                even = even[:len(even)-1]
                vtmp = append(vtmp, tmp.Val)
                if tmp.Right != nil {
                    odd = append(odd, tmp.Right)
                }
                if tmp.Left != nil {
                    odd = append(odd, tmp.Left)
                }
                
            }
            if len(vtmp) !=0 {
                res = append(res, vtmp)
            }
            
        }
        return res
    }
  • 相关阅读:
    2020 春 学期总结
    计算机科学的咬文嚼字:“并行”与“并发”
    Codeforces 1251E Voting
    Codeforces 1251D Salary Changing
    Asia Jakarta Regional Contest 2019 I
    hdu1007 Quoit Design
    2019春季学期回忆和总结
    bzoj5017 [Snoi2017]炸弹
    我永远讨厌gch文件
    bzoj5102 [POI2018]Prawnicy
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14642749.html
Copyright © 2011-2022 走看看