题解 | #输出二叉树的右视图#
输出二叉树的右视图
http://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0
package main //BFS层序输出 右边第一个 func solve( xianxu []int , zhongxu []int ) []int { root := buildTree(xianxu, zhongxu) if root == nil { return []int{} } queue := []*TreeNode{root} levels := []int{} for len(queue) > 0 { n := len(queue) for i := 0; i < n; 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 == n-1 { levels = append(levels, root.Val) } } } return levels } //重建二叉树 func buildTree(preorder []int, inorder []int) *TreeNode { if len(preorder) == 0 || len(inorder) == 0 { return nil } root := &TreeNode{preorder[0] , nil , nil } //根据前序,找到根节点,开始划分三部分 i := 0 for i = 0; i < len(inorder); i++ { if inorder[i] == preorder[0] { //中序 在inorder找到 根结点(上文)== 递归的核心 break } } root.Left = buildTree(preorder[1: len(inorder[:i]) + 1], inorder[:i]) //在中序【i】的左边 root.Right = buildTree(preorder[len(inorder[:i]) + 1:], inorder[i+1:]) //在中序【i】的右边 return root }