当前位置: 首页 > news >正文

leetcode刷题日记——二叉树的右视图

[ 题目描述 ]:
在这里插入图片描述
[ 思路 ]:

  • 二叉树的右视图:即二叉树每层最右边的节点
  • BFS:使用层次遍历,每当遍历到每层最后一个节点时,记录改节点的值
  • 运行如下
    -
int* rightSideView(struct TreeNode* root, int* returnSize) {if(!root){*returnSize=0;return NULL;} struct TreeNode* nums[100];int left=0,right=0,sum=0,cur_rear=1;int* res=(int*)malloc(sizeof(int)*100);nums[right++]=root;while(left<right){if(nums[left]->left){nums[right++]=nums[left]->left;}if(nums[left]->right){nums[right++]=nums[left]->right;}if(left==cur_rear-1){res[sum++]=nums[left]->val;cur_rear=right;}left++;}   *returnSize=sum;return res;
}

[ 官方题解 ]:

  • 方法一:深度优先搜索:对树进行深度优先搜索,在搜索过程中,我们总是先访问右子树。那么对于每一层来说,我们在这层见到的第一个结点一定是最右边的结点。
class Solution:def rightSideView(self, root: TreeNode) -> List[int]:rightmost_value_at_depth = dict() # 深度为索引,存放节点的值max_depth = -1stack = [(root, 0)]while stack:node, depth = stack.pop()if node is not None:# 维护二叉树的最大深度max_depth = max(max_depth, depth)# 如果不存在对应深度的节点我们才插入rightmost_value_at_depth.setdefault(depth, node.val)stack.append((node.left, depth + 1))stack.append((node.right, depth + 1))return [rightmost_value_at_depth[depth] for depth in range(max_depth + 1)]
  • 方法二:广度优先搜索,基本同上

相关文章:

  • 使用Python绘制节日祝福——以端午节和儿童节为例
  • 嵌入式编译工具链熟悉与游戏移植
  • Fragment事务commit与commitNow区别
  • atapi!IdeReadWrite函数分析中.txt
  • LeeCode 98. 验证二叉搜索树
  • LearnOpenGL-笔记-其十二
  • oscp练习PG Monster靶机复现
  • C# 如何获取当前成员函数的函数名
  • Kerberos面试内容整理-Kerberos 与 LDAP/Active Directory 的集成
  • C++哈希表:unordered系列容器详解
  • 2.5/Q2,Charls最新文章解读
  • 动态规划-376.摆动序列-力扣(LeetCode)
  • 使用HTTPS进行传输加密
  • WIN11+eclipse搭建java开发环境
  • Codesys FOR 循环之轴控
  • AIGC学习笔记(8)——AI大模型开发工程师
  • AI读懂天书:Manus AI跨语种手写识别解密
  • 【Python】解析 io.StringIO 与 io.BytesIO
  • Kafka 的 ISR 机制深度解析:保障数据可靠性的核心防线
  • Java 文件操作 和 IO(4)-- Java文件内容操作(2)-- 字符流操作
  • 利用php做直播网站/杭州云优化信息技术有限公司
  • 东莞的网站建设/最近营销热点
  • wordpress政府风险/willfast优化工具下载
  • 网站建设的工期拖延如何解决/如何通过网络营销自己
  • 网站建设过程规划和准备阶段/怎样推广网站
  • wordpress tag数字url/网站优化公司排名