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

输出二叉树的右视图

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)
}
全部评论

相关推荐

10-07 20:48
门头沟学院 Java
不敢追175女神:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务