剑指Offer 32 - III. 从上到下打印二叉树

发布时间 2023-08-27 21:26:18作者: 小星code

题目链接: 剑指Offer 32 - III. 从上到下打印二叉树

题目描述:

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

解法思路:

本题在一题的基础上,区分打印方向,加一个bool型的方向变量即可;

代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrder(root *TreeNode) [][]int {
    if root == nil {
        return nil
    }
    var res [][]int
    var q []*TreeNode
    q = append(q,root)
     d := true    //表示输出方向,true是从左向右
    for len(q) > 0{
        n := len(q)
        var path []int
        for i:=0;i<n;i++{
            node := q[0]
            q = q[1:]
            path = append(path,node.Val)
            if node.Left != nil {
                q = append(q,node.Left) 
            }
            if node.Right != nil{
                q = append(q,node.Right)
            }
        }
        if d == false{
            for i,j := 0,len(path)-1;i < j; i,j = i+1,j-1 {
                path[i],path[j] = path[j],path[i]
            }
            d = true
        }else{
            d= false
        }
tmp := make([]int,len(path))
    copy(tmp,path)
    res = append(res,tmp)


    }
    return res
    

}