题解 | #二叉树程序遍历 ii# 分层遍历+结果翻转

二叉树程序遍历 ii

http://www.nowcoder.com/practice/d8566e765c8142b78438c133822b5118

先分层遍历,再对结果进行翻转

func levelOrderBottom( root *TreeNode ) [][]int {
    // write code here
    if root == nil {
        return nil
    }

    ret := make([][]int, 0)
    stack := []*TreeNode{root}

//  先分层遍历
    for len(stack) >0 {
        size := len(stack)
        tmp := make([]int, 0, size)
        for i:=0; i< size; i++{
            node := stack[i]
            tmp = append(tmp, node.Val)

            if node.Left != nil {
                stack = append(stack, node.Left)
            }
            if node.Right != nil {
                stack = append(stack, node.Right)
            }
        }
        stack = stack[size:]

        ret = append(ret, tmp)
    }

//  最后对结果进行翻转
    if len(ret) > 0 {
        for i, j := 0, len(ret)-1; i<j; i,j = i+1, j-1 {
            ret[i], ret[j] = ret[j], ret[i]
        }
    }

    return ret
}
全部评论

相关推荐

黑皮白袜臭脚体育生:简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写会更好另外宣传下自己的开源仿b站微服务项目,GitHub已经410star,牛客上有完整文档教程,如果觉得有帮助的话可以点个小星星,蟹蟹
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务