根据题意,首先进行根据中序遍历和先序遍历对树进行创建,该过程可用递归实现
- 每次取中序遍历第一个节点的值作为根节点
- 在先序遍历中找到根节点值的位置,左侧为左子树,右侧为右子树
- 递归遍历构建树直到中序或先序数组为空 得到树的右视图时,即层序遍历每一层的最右侧节点 代码如下
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 求二叉树的右视图
# @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