/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 求二叉树的右视图
 * @param xianxu int整型一维数组 先序遍历
 * @param zhongxu int整型一维数组 中序遍历
 * @return int整型一维数组
*/

func solve( xianxu []int ,  zhongxu []int ) []int {
	// write code here
	root := createTree(xianxu,zhongxu)
	if root == nil {
		return []int{}
	}

	queue := []*TreeNode{root}
	var rights []int

	    for len(queue) > 0 {
	        l := len(queue)
	        for i:=0;i<l;i++{
	            root := queue[0]
	            queue= queue[1:]
	            if root.Left != nil {
	                queue = append(queue,root.Left)
	            }
	            if root.Right != nil {
	                queue = append(queue,root.Right)
	            }

	            if i == l-1{
	                rights = append(rights,root.Val)
	            }
	        }
	    }
	return rights
}


func createTree(preorder,inorder []int) *TreeNode{
	if len(preorder) == 0 || len(inorder) == 0 {
		return nil
	}

	root := &TreeNode{Val:preorder[0]}

	i := 0
	for ;i<len(inorder);i++{
		if inorder[i] == preorder[0]{
			break
		}
	}

	root.Left = createTree(preorder[1:i+1],inorder[:i])
	root.Right = createTree(preorder[i+1:],inorder[i+1:])
	return root
}