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

输出二叉树的右视图

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

golang实现
简单的概括逻辑:
(1)根据前序,中序。把树上的所有数字遍历一遍,这时我们是可以知道当前的数字在tree中的层数的
(2)并根据数字在tree的层数,塞到对应的数组index中,最后得出的数组即为右视图。

因为是按照中序的顺序遍历的,最后势必右树的数字会覆盖同层左侧的数字,就达到了右视图的效果

package main

func solve(xianxu []int, zhongxu []int) []int {
    // rightList 专门存放每层的数字,同层的数字会覆盖之前的记录
    var rightList = []int{}
    rebuildTree(xianxu, zhongxu, 0, &rightList)
    return rightList
}
// level 树遍历的层数 list 存储树上每层最后一个数字
func rebuildTree(xianxu []int, zhongxu []int, level int, list *[]int) {
    if len(xianxu) == 0 {
        return
    }
// 此处寻找中序中的root节点
    var rootIndex = 0
    for i := range zhongxu {
        if xianxu[0] == zhongxu[i] {
            rootIndex = i
        }
    }
// 此处,把每层的数字都赋值到数组中,同层如果已有数字,会直接覆盖(因为被遮挡了嘛)
    if len(*list)-1 < level {
        *list = append(*list, xianxu[0])
    } else {
        (*list)[level] = xianxu[0]
    }
// 分别递归root的左树,每次递归时,说明已经是tree的下一层了,所以level需要+1
    rebuildTree(xianxu[1:rootIndex+1], zhongxu[:rootIndex], level+1, list)
// 分别递归root的右树
    rebuildTree(xianxu[rootIndex+1:], zhongxu[rootIndex+1:], level+1, list)
}
全部评论

相关推荐

暴走萝莉莉:这是社招场吧,作为HR说个实话:这个维护关系的意思是要有政府资源,在曾经的工作中通过人脉资源拿下过大订单的意思。这个有相关管理经验,意思也是真的要有同岗位经验。应酬什么的对于业务成交来说就算不乐意也是常态,就是要求说话好听情商高,酒量好。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务