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

输出二叉树的右视图

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
}












全部评论

相关推荐

认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
07-01 23:23
郑州大学 Java
否极泰来来来来:牛客迟早有高三的
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务