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