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

输出二叉树的右视图

https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0

package main

import (
	"container/list"
    . "nc_tools"
)

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 求二叉树的右视图
 * @param preOrder int整型一维数组 先序遍历
 * @param inOrder int整型一维数组 中序遍历
 * @return int整型一维数组
 */
func solve( preOrder []int ,  inOrder []int ) []int {
    //创建一个map记录中序遍历索引和值对应的关系
    index:=make(map[int]int,len(preOrder))
    for i:=range inOrder{
        index[inOrder[i]]=i
    }
    root:=buildTree(preOrder, 0, len(preOrder)-1, inOrder, 0, len(preOrder)-1, index)
    //对其进行BFS
    var nums []int
    //创建一个队列,头进尾出
    ll:=list.New()
    ll.PushFront(root)
    for ll.Len()>0{
        l:=ll.Len()
        var ele *list.Element
        for l>0{
            //取出节点
            ele=ll.Back()
            if ele.Value.(*TreeNode).Left!=nil{
                ll.PushFront(ele.Value.(*TreeNode).Left)
            }
            if ele.Value.(*TreeNode).Right!=nil{
                ll.PushFront(ele.Value.(*TreeNode).Right)
            } 
            ll.Remove(ele)
            l--
        }
        nums=append(nums, ele.Value.(*TreeNode).Val)
    }
    return nums
}



func buildTree(preOrder []int, preStart, preEnd int, inOrder []int, inStart, inEnd int, index map[int]int)*TreeNode{
    if preStart>preEnd||inStart>inEnd{
        return nil
    }
    //创建根节点
    root:=&TreeNode{
        Val: preOrder[preStart],
    }
    //获取中序遍历的根节点的索引
    inIndex:=index[preOrder[preStart]]
    le:=inIndex-inStart
    root.Left=buildTree(preOrder, preStart+1, preStart+le, inOrder, inStart, inIndex-1,index)
    root.Right=buildTree(preOrder, preStart+1+le, preEnd, inOrder, inIndex+1, inEnd, index)
    return root
}

全部评论

相关推荐

秋招不是要开始了吗,我都打算润了,看大家还在找不敢润了
一条从:因为不是人人都像佬一样有实习像我们这种二本仔秋招没有实习也是白忙活
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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