package main

func solve(xianxu []int ,  zhongxu []int) []int {
    tmp := make([]int, 0)
    if len(xianxu) == 0 {      // 递归终点
        return tmp
    }
    if len(xianxu) == 1 {      // 递归终点
        return append(tmp, xianxu[0])
    }

    leftXianxu , rightXianxu , leftzhognxu, rightzhognxu, root := make([]int, 0), make([]int, 0), make([]int, 0), make([]int, 0), 0  //有点费gc
    for i := 0; i< len(xianxu);i++ {  
        if zhongxu[i] == xianxu[0] {
            leftXianxu = xianxu[1:i+1]
            rightXianxu = xianxu[i+1:]
            leftzhognxu = zhongxu[:i]
            rightzhognxu = zhongxu[i+1:]   // 分别得到左右子树的两种遍历序列
            root = xianxu[0]
        }
    }

    tmp = append(tmp, root)
    leftRet := solve(leftXianxu, leftzhognxu)  // 开始递归
    rightRet := solve(rightXianxu, rightzhognxu)
    for i, j := 0, 0; i < len(leftRet) || j < len(rightRet); { // 左右子树的右视图,加上root节点,合并下得到当前root开始的右视图
        if i >= len(leftRet) {
            tmp = append(tmp, rightRet[j:]...)
            break
        }
        if j >= len(rightRet) {
            tmp = append(tmp, leftRet[i:]...)
            break
        }
        tmp = append(tmp, rightRet[j])
        i++
        j++
    }
    return tmp
}