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

输出二叉树的右视图

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
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务