题解 | #输出二叉树的右视图#
输出二叉树的右视图
https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0
简单的二叉树重建 + 层序遍历
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 求二叉树的右视图
* @param xianxu int整型一维数组 先序遍历
* @param zhongxu int整型一维数组 中序遍历
* @return int整型一维数组
*/
func solve( xianxu []int , zhongxu []int ) []int {
// write code here
root := build(xianxu, zhongxu)
//level order
res := make([]int, 0)
queue := make([]*TreeNode, 0)
queue = append(queue, root)
res = append(res, queue[len(queue) - 1].Val)
for len(queue) != 0 {
size := len(queue)
for index := 0; index < size; index++ {
curr := queue[0]
queue = queue[1:]
if curr.Left != nil {
queue = append(queue, curr.Left)
}
if curr.Right != nil {
queue = append(queue, curr.Right)
}
}
if len(queue) > 0 {
res = append(res, queue[len(queue) - 1].Val)
}
}
return res
}
func build(xianxu []int , zhongxu []int) *TreeNode {
if len(xianxu) == 0 {
return nil
}
root := &TreeNode{Val: xianxu[0]}
position := find(xianxu[0], zhongxu)
root.Left = build(xianxu[1: position + 1], zhongxu[:position])
root.Right = build(xianxu[position + 1:], zhongxu[position + 1:])
return root
}
func find(t int, arr []int) int{
for index, val := range arr {
if val ==t {
return index
}
}
return -1
}

