/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 求二叉树的右视图
* @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
}