算法刷题Day18: BM41 输出二叉树的右视图
题目链接
描述
思路:
递归构造二叉树在Day15
有讲到。复习一下,就是使用递归构建左右子树。将中序和前序一分为二。
接下来是找出每一层的最右边的节点,可以利用队列+层次遍历。
利用队列长度记录当前层有多少个节点,每次从队列里取一个节点就size-1
,当size
为0
时,即为该层的最后一个节点,然后更新size
为队列长度。
代码:
import queue
def constructTree(preOrder,vinOrder):# 递归退出条件if len(preOrder) == 0:return None# 根节点root_val = preOrder[0]root = TreeNode(root_val)index = vinOrder.index(root_val)leftnode = constructTree(preOrder[1:index+1], vinOrder[:index])rightnode = constructTree(preOrder[index+1:],vinOrder[index+1:])root.left = leftnoderoot.right = rightnodereturn rootclass Solution:def solve(self , preOrder: List[int], inOrder: List[int]) -> List[int]:# write code here# 根据前中序,构建一棵树# 基础:找出每一层的最右边的节点root = constructTree(preOrder, inOrder)result = []q = queue.Queue()q.put(root)# 记录每一层的sizesize = 1while not q.empty():node = q.get()if node.left:q.put(node.left)if node.right:q.put(node.right)size -= 1if size == 0:# 最后一个节点size = q.qsize()result.append(node.val)return result
还完债了,回家就刀片嗓有点难受啊,以后再也不吃啫啫煲了,好上火。