题解 | #输出二叉树的右视图#

输出二叉树的右视图

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
}












全部评论

相关推荐

03-29 12:10
门头沟学院 C++
挣K存W养DOG:散漫消极者淘汰,一眼坑爹。实习几个月转正的时候说你加班太少,能力还行态度不够积极裁了,马上老实。
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务