栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

LeetCode 199. 二叉树的右视图

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 199. 二叉树的右视图

199. 二叉树的右视图

题目来源:https://leetcode-cn.com/problems/binary-tree-right-side-view/

题目

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

示例:

输入: [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. 二叉树的右视图》问题的主要内容。


转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号