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

力扣算法刷题 Day 14

226. 翻转二叉树

题目链接

226. 翻转二叉树 - 力扣(LeetCode)

思路

递归法:交换左右子树即可,函数退出状态为当前节点为NULL。

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: TreeNode* invertTree(TreeNode* root) { if(root == NULL) return root; swap(root->left,root->right); invertTree(root->left); invertTree(root->right); return root; } };

迭代法:之前写过迭代法遍历,自然也可以写出这个。注意用到栈的数据结构,左右子树入栈时先右边入栈。以及操作时避免空指针异常需要先做判断。

TreeNode* invertTree(TreeNode* root) { stack <TreeNode*> st; if(root == NULL) return root; st.push(root); while(!st.empty()) { TreeNode* tmp = st.top(); st.pop(); swap(tmp->left,tmp->right); if(tmp->right) st.push(tmp->right); if(tmp->left) st.push(tmp->left); } return root; }
文章详解

226.翻转二叉树 | 代码随想录

101. 对称二叉树

题目链接

101. 对称二叉树 - 力扣(LeetCode)

思路

递归法:要判断是否反转,就要比较左边的外/内侧节点和右边的外/内侧节点是否相同。函数的返回值应该是bool类型,入口参数就是左右孩子节点。递归结束条件为,左右孩子存在空或都不空且数值不相等。进入递归逻辑,左树要 左右根,右树要右左根。

文章详解

101. 对称二叉树 | 代码随想录

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: bool compare(TreeNode *left,TreeNode * right) { if(left == NULL && right != NULL) return false; if(right == NULL && left != NULL) return false; if(left == NULL && right == NULL) return true; if(left->val != right->val) return false; bool out = compare(left->left,right->right); bool in = compare(left->right,right->left); return out&&in; }; bool isSymmetric(TreeNode* root) { if(root == NULL) return true; return compare(root->left,root->right); } };

104. 二叉树的最大深度

题目链接

104. 二叉树的最大深度 - 力扣(LeetCode)

思路

递归法:函数返回值:int 入口参数:根节点root 结束条件:当前节点为空 递归:求左/右子树的深度,取最大值加1

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int getdepth(TreeNode * root) { if(root == NULL) return 0; int ld = getdepth(root->left); int rd = getdepth(root->right); int max1 = 1 + max(ld,rd); return max1; } int maxDepth(TreeNode* root) { int dep = getdepth(root); return dep; } };

迭代法:按照层序遍历的思路,遍历多少层就是深度多少。注意数据结构的选择为队列。

int maxDepth(TreeNode* root) { queue <TreeNode *> que; if(root == NULL) return 0; que.push(root); int depth = 0; while(!que.empty()) { int size = que.size(); depth++; for(int i = 0; i < size; i++) { TreeNode * node = que.front(); que.pop(); if(node->left) que.push(node->left); if(node->right) que.push(node->right); } } return depth; }
文章详解

104.二叉树的最大深度 | 代码随想录

111. 二叉树的最小深度

题目链接

111. 二叉树的最小深度 - 力扣(LeetCode)

思路

和最大深度的差异在于,最小深度的定义为: 叶子节点到根节点的最小距离。何为叶子节点?左右子节点均为空。因此,当有一个子节点为空而另一个不为空时,该节点不为最短节点。

文章详解

111.二叉树的最小深度 | 代码随想录

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int getdepth(TreeNode* root) { if(root == NULL) return 0; int ld = getdepth(root->left); int rd = getdepth(root->right); if(root->left == NULL && root->right != NULL) { return 1 + rd; } else if(root->right ==NULL&&root->left != NULL ) { return 1 + ld; } int minidep = min(ld,rd) + 1; return minidep; } int minDepth(TreeNode* root) { return getdepth(root); } };
http://www.jsqmd.com/news/493368/

相关文章:

  • 3大突破!图像矢量化技术如何解决中小企业设计资源优化难题
  • 抖音批量监控千名博主视频更新,实时下载技术解析
  • Python默认参数详解
  • VS Code 聊天功能深度解析:从激活到精通,解锁AI编程新范式
  • 从保护环设计到势垒高度设置:Silvaco仿真肖特基二极管的3个关键陷阱
  • Task2:ESP32代码学习和基础API需求
  • CLIP-GmP-ViT-L-14在嵌入式设备端的轻量化部署探索
  • 如何用Python实现三角函数公式的自动计算与验证
  • CTF流量分析新选择:3个核心功能让你轻松应对网络安全挑战
  • 从零开始:tModLoader全面指南 - 打造专属泰拉瑞亚模组世界
  • 原本该有一篇文章发出来
  • 从零学 Linux:从发行版到包管理器,一篇吃透基础要点
  • SiameseAOE中文-base参数详解:Prompt+Text构建思路与schema定义规范
  • SecGPT-14B开源模型落地:适配国产化GPU环境的网络安全垂直大模型实践
  • STM32F4实战:CoreMark跑分从移植到优化的完整指南(附常见问题排查)
  • 如何3分钟实现抖音视频批量下载:douyin-downloader完整指南
  • cmux多智能体管理工具
  • 阿里云MQTT连接失败?工程师亲授的PubSubClient避坑指南(附完整参数配置)
  • LSTM与BERT模型在序列标注任务上的分割效果对比
  • dll文件缺失,DirectX 运行库修复工具,一键完成dll缺失修复、解决99.99%程序故障、闪退、卡顿等常见问题,轻松解决
  • 用SDXL 1.0做个人作品集:快速生成多种风格的高质量插画与概念图
  • OFA模型轻量化部署:针对边缘设备的优化思路与探索
  • 从雷诺运输定理到高维PBE:流体动力学中的物质守恒法则
  • Local AI MusicGen批量生成任务的优化策略
  • LangChain4j实战:构建企业级RAG问答系统的核心步骤与避坑指南
  • AI头像生成器GPU算力方案:Qwen3-32B在A10/A100/L4卡上的部署性能对比
  • DIY—一拖四串口调试助手
  • CW1173(ChipWhisperer-Lite)板卡修复成功步骤总结
  • 手把手教你用阿里云镜像在Ubuntu上离线安装OpenSSH(最新版)
  • 共模电感差共模插入损耗的仿真优化与实际电路匹配验证