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

输出二叉树的右视图

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

package main

import (
	. "nc_tools"
)

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 求二叉树的右视图
 * @param preOrder int整型一维数组 先序遍历
 * @param inOrder int整型一维数组 中序遍历
 * @return int整型一维数组
 */
func solve(preOrder []int, inOrder []int) []int {
	// write code here
	if len(preOrder) == 0 || len(inOrder) == 0 {
		return nil
	}
	root := reConstructTree(preOrder, inOrder)
	var result []int
	queue := []*TreeNode{root}
	for len(queue) > 0 {
		levelLegth := len(queue)
		for i := 0; i < levelLegth; i++ {
			node := queue[0]
			queue = queue[1:]
			if i == levelLegth-1 {
				result = append(result, node.Val)
			}

			if node.Left != nil {
				queue = append(queue, node.Left)
			}
			if node.Right != nil {
				queue = append(queue, node.Right)
			}
		}

	}
	return result
}

func reConstructTree(preOrder []int, inOrder []int) *TreeNode {
    if len(preOrder) == 0 || len(inOrder) == 0 {
        return nil
    }
	root := &TreeNode{Val: preOrder[0]}
	mid := findTargetIndex(inOrder, preOrder[0])
	root.Left = reConstructTree(preOrder[1:mid+1], inOrder[0:mid])
	root.Right = reConstructTree(preOrder[mid+1:], inOrder[mid+1:])
	return root
}

func findTargetIndex(inOrder []int, target int) int {
	for key, value := range inOrder {
		if value == target {
			return key
		}
	}
	return -1
}

全部评论

相关推荐

07-14 13:37
重庆大学 C++
点赞 评论 收藏
分享
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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