题解 | #输出二叉树的右视图#

输出二叉树的右视图

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

Golang题解-不创建树,只在递归中得到结果

分析题意可以知道取出每层的最右侧的值然后存放数组即可。

使用DLR可以取到每层的最左边的值,那么我们可以使用“DRL”取到每层最右边的值。也就是说每次先遍历右子树而不是左子树。

那么如何保证每层只取一个呢,思考每层具有自身独一无二的值:层深度。那么我们可以设置一个全局变量当前层深度和最大层深度,每层递归一开始当前深度+1,然后判断是否是最大深度,只有是最大深度才说明是第一次运行到本层,然后直接加入结果即可,然后本次递归结束后当前深度再-1。

具体代码可以参考“根据前序中序遍历结果得到二叉树”那道题。把先递归左改为先递归右,然后加上深度判断和并入结果即可。具体代码如下:

var res []int
var deep, maxDeep = 0, 0
 
func solve(xianxu []int, zhongxu []int) []int {
    help(xianxu, zhongxu)
    return res
}
 
func help(xianxu []int, zhongxu []int) {
    deep = deep + 1
    if deep > maxDeep {
        maxDeep = deep
        res = append(res, xianxu[0])
    }
    i := getIndex(zhongxu, xianxu[0])
 
    if i+1 < len(xianxu) {
        help(xianxu[i+1:], zhongxu[i+1:])
    }
    if i+1 > 1 {
        help(xianxu[1:i+1], zhongxu[:i])
    }
    deep = deep - 1
}
 
func getIndex(arr []int, val int) int {
    for i, r := range arr {
        if r == val {
            return i
        }
    }
    return -1
}
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务