第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

LeetCode 199. 二叉樹的右視圖

標(biāo)簽:
Python 算法

199. 二叉树的右视图


题目


给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例:

输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:

   1            <---
 /   \
2     3         <---
 \     \
  5     4       <---

解题思路


思路一:广度优化搜索

当对二叉树进行层次遍历时,每一层最右边的节点是最后访问的。题目中要求返回从右侧所能看到的节点值,正是这里每层最右边的节点。那么保留每层最后的访问节点,就能得到需要求的答案。

这里使用队列存储。

具体可参照代码进行理解。

思路二:深度优化搜索

同样的,这道题也能够使用深度优化搜索来解决。

在搜索的过程中,我们先访问右子树,再访问左子树。那么每层的第一个节点就是最右边节点。这个时候,只要知道二叉树的深度,则可以得到最终的答案。

具体可参照代码进行理解。

代码实现


代码实现 | 广度优化搜索
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def rightSideView(self, root: TreeNode) -> List[int]:
        if root == None:
            return []
        # 导入 deque 创建队列
        from collections import deque

        queue = deque([root])

        res = []

        while queue:
            size = len(queue)
            # 这里用 size 记录二叉树每层的节点数,
            for i in range(size):
                # 弹出节点
                node = queue.popleft()
                # 先将左节点入队
                if node.left != None:
                    queue.append(node.left)
                # 再将右节点入队
                if node.right != None:
                    queue.append(node.right)
                # 队列先入先出,如果 i 等于 size - 1,
                # 那么这里就是最右边的节点,这个就要得到的结果,将其放入返回列表中
                if i == size - 1:
                    res.append(node.val)

        return res

代码实现 | 深度优化搜索
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def rightSideView(self, root: TreeNode) -> List[int]:
        res = []

        def _dfs(node, depth):
            if node == None:
                return []

            # res 的索引表示二叉树的深度
            # 若当前的深度的节点不存在于 res 中,
            # 表示该层的最右边节点还未将其添加到 res 中
            # 将其加入到节点中
            if depth == len(res):
                res.append(node.val)
            # 往一下层访问,先访问右子树,在访问左子树
            depth += 1

            _dfs(node.right, depth)
            _dfs(node.left, depth)

        _dfs(root, 0)

        return res

实现结果


实现结果 | 广度优化搜索

广度优化搜索 | 实现结果

实现结果 | 深度优化搜索

深度优化搜索 | 实现结果


以上就是使用广度优化搜索或深度优化搜索的思想,解决《199. 二叉树的右视图》问题的主要内容。


點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消