根据题意,首先进行根据中序遍历和先序遍历对树进行创建,该过程可用递归实现

  1. 每次取中序遍历第一个节点的值作为根节点
  2. 在先序遍历中找到根节点值的位置,左侧为左子树,右侧为右子树
  3. 递归遍历构建树直到中序或先序数组为空 得到树的右视图时,即层序遍历每一层的最右侧节点 代码如下
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 求二叉树的右视图
# @param xianxu int整型一维数组 先序遍历
# @param zhongxu int整型一维数组 中序遍历
# @return int整型一维数组
#
class TreeNode:
    def __init__(self, val, left = None, right = None):
        self.val = val
        self.left = left
        self.right = right
        
class Solution:
    def build(self, x, z):
        if not x or not z:
            return None
        root = TreeNode(x[0])
        index = z.index(x[0])
        root.left = self.build(x[1:index + 1], z[:index])
        root.right = self.build(x[index + 1:], z[index + 1:])
        return root
    
    def solve(self , xianxu , zhongxu ):
        # write code here
        root = self.build(xianxu, zhongxu)
        if not root:
            return []
        queue = [root]
        res = []
        while queue:
            next_list, vals = [], [] 
            for node in queue:
                if node.left:
                    next_list.append(node.left)
                if node.right:
                    next_list.append(node.right)
                vals.append(node.val)
            queue = next_list
            if vals:
                res.append(vals[-1])
        return res