算法刷题Day18: BM41 输出二叉树的右视图

题目链接

描述

思路:

递归构造二叉树在Day15有讲到。复习一下,就是使用递归构建左右子树。将中序和前序一分为二。

接下来是找出每一层的最右边的节点,可以利用队列+层次遍历。

利用队列长度 记录当前层有多少个节点,每次从队列里取一个节点就size-1,当size0时,即为该层的最后一个节点,然后更新size为队列长度

代码:

python 复制代码
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 = leftnode
    root.right = rightnode
    return root

class 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)
        # 记录每一层的size
        size = 1
        while not q.empty():
            node = q.get()
            if node.left:
                q.put(node.left)
            if node.right:
                q.put(node.right)
            size -= 1
            if size == 0:
                # 最后一个节点
                size = q.qsize()
                result.append(node.val)
        return result
        

还完债了,回家就刀片嗓有点难受啊,以后再也不吃啫啫煲了,好上火。

相关推荐
呆呆在发呆.8 分钟前
数据结构复习总结(期末前更新)
数据结构·c++·算法·链表·贪心算法·柔性数组
极客小张19 分钟前
基于STM32的智电表系统课题设计思路:python友好界面、ADC、UART串口、数据分析
c语言·python·stm32·单片机·数据分析·毕业设计·课程设计
cloud___fly21 分钟前
力扣hot100——双指针
数据结构·算法·leetcode·贪心算法
勤劳的进取家32 分钟前
利用模拟退火算法求解旅行商问题
开发语言·python
威威猫的栗子1 小时前
用 Python Turtle 绘制经典汤姆猫:重温卡通角色的经典魅力
开发语言·python
一念之坤1 小时前
11篇--图像边缘检测
图像处理·python·opencv·计算机视觉
工一木子1 小时前
【Leecode】Leecode刷题之路第82天之删除排序链表中的重复元素II
java·数据结构·算法·leetcode·链表
星辰@Sea1 小时前
Python 实现对人的行为预测
开发语言·python
一只小灿灿1 小时前
计算机视觉中的图像滤波与增强算法
人工智能·算法·计算机视觉
Illusionna.1 小时前
Word2Vec 模型 PyTorch 实现并复现论文中的数据集
人工智能·pytorch·算法·自然语言处理·nlp·matplotlib·word2vec