简单的二叉树重建 + 层序遍历
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
}