《leetcode-go》二叉树层序遍历 ii

给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历)

例如:

给定的二叉树是{3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

该二叉树由底层到顶层层序遍历的结果是

[[15,7],[9,20],[3]]

思路:正向遍历然后加了个一个逆转的结果。

package main
import . "nc_tools"
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
  * 
  * @param root TreeNode类 
  * @return int整型二维数组
*/
func levelOrderBottom( root *TreeNode ) [][]int {
    // write code here
    if root == nil {
		return nil
	}
	var ret [][]int
	var treeList []*TreeNode
	treeList = append(treeList, root)
	for len(treeList) > 0 {
		//取出一层的数量
		var levelList []int
		num := len(treeList)
		for num > 0 {
			node := treeList[0]
			levelList = append(levelList, node.Val)
			if node.Left != nil {
				treeList = append(treeList, node.Left)
			}
			if node.Right != nil {
				treeList = append(treeList, node.Right)
			}
			treeList = treeList[1:]
			num --
		}
		ret = append(ret, levelList)
	}
	var ret1 [][]int
	num := len(ret)
	for i := num - 1; i >= 0; i -- {
		ret1 = append(ret1, ret[i])
	}
	return ret1
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值