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

《代码随想录》刷题打卡day13:二叉树part03

文章目录

        • 【平衡二叉树】
        • 【二叉树的所有路径】
        • 【左叶子之和】
        • 【完全二叉树的节点个数】
【平衡二叉树】

求深度适合用前序遍历,而求高度适合用后序遍历。
回溯通常都不用迭代法,递归一定要掌握!

// 返回以该节点为根节点的二叉树的高度,如果不是平衡二叉树了则返回-1 int getHeight(TreeNode* node) { if (node == NULL) { return 0; } int leftHeight = getHeight(node->left); if (leftHeight == -1) return -1; int rightHeight = getHeight(node->right); if (rightHeight == -1) return -1; return abs(leftHeight - rightHeight) > 1 ? -1 : 1 + max(leftHeight, rightHeight); } bool isBalanced(TreeNode* root) { return getHeight(root) == -1 ? false : true; }
【二叉树的所有路径】

思路:

  1. 来一个节点,先存进路径
  2. 到叶子节点,就把路径存起来
  3. 走完一条路,必须回退一步(回溯),再走另一条路

回溯和递归是一一对应的,有一个递归,就要有一个回溯

void travelsal(TreeNode* cur, vector<int>& path, vector<string>& result){ path.push_back(cur->val);// 中,中为什么写在这里,因为最后一个节点也要加入到path中 // 说明到了叶子结点 if(cur->left == nullptr && cur->right == nullptr){ string sPath; for(int i = 0;i < path.size() - 1;i++){ sPath += to_string(path[i]); sPath += "->"; } sPath += to_string(path[path.size() - 1]); result.push_back(sPath); } // 未到叶子结点 if(cur->left){ travelsal(cur->left, path, result); path.pop_back();// 回溯 } if(cur->right){ travelsal(cur->right, path, result); path.pop_back();// 回溯 } } vector<string> binaryTreePaths(TreeNode* root) { vector<int> path; vector<string> result; if(root == nullptr) return result; travelsal(root, path, result); return result; }
【左叶子之和】

思路:

  1. 遍历二叉树所有节点(栈 / 递归都行)
  2. 对每个节点,只看它的左孩子
  3. 判断左孩子是不是左叶子
  1. 继续遍历右孩子
  2. 最后返回 sum

递归法:

int sumOfLeftLeaves(TreeNode* root) { if(root == nullptr) return 0;// 如果当前节点是空节点,左叶子必然是0 if(root->left == nullptr && root->right == nullptr) return 0;// 如果父节点是叶子结点,其左叶子也必然是0 int leftValue = sumOfLeftLeaves(root->left); if(root->left != nullptr && root->left->left == nullptr && root->left->right == nullptr){// 左子树就是一个左叶子的情况 leftValue = root->left->val; } int rightValue = sumOfLeftLeaves(root->right); int sum = leftValue + rightValue; return sum; }

迭代法:

int sumOfLeftLeaves(TreeNode* root) { if(root == nullptr) return 0; stack<TreeNode*> st; st.push(root); int sum = 0; while(!st.empty()){ TreeNode* cur = st.top(); st.pop(); if(cur->left){ st.push(cur->left); if(!cur->left->left && !cur->left->right){ sum += cur->left->val; st.pop(); } } if(cur->right){ st.push(cur->right); } } return sum; }
【完全二叉树的节点个数】

递归法:最大深度略加修改

int getNodesSum(TreeNode* cur){ if(cur == nullptr) return 0; int leftNum = getNodesSum(cur->left); int rightNum = getNodesSum(cur->right); int TreeNum = leftNum + rightNum + 1; return TreeNum; } int countNodes(TreeNode* root) { return getNodesSum(root); }

迭代法:层序遍历模板略加修改

int countNodes(TreeNode* root) { if(root == nullptr) return 0; queue<TreeNode*> que; que.push(root); int sum = 0; while(!que.empty()){ int size = que.size(); for(int i = 0; i < size; i++){ TreeNode* node = que.front(); sum++; que.pop(); if(node->left) que.push(node->left); if(node->right) que.push(node->right); } } return sum; }
http://www.jsqmd.com/news/994253/

相关文章:

  • KTV、剧场、政企场馆,不同场景舞台灯光厂家该怎么挑 - 深度智识库
  • 如何安全高效使用YimMenu:GTA5终极辅助工具完整指南
  • 2026年6月保鲜库供应商有哪些,双温冷库/冷藏库/土建冷库/冷库/冷冻库/装配式冷库/集装箱冷库,保鲜库供应商怎么选择 - 品牌推荐师
  • SAP ABAP实战:用BAPI_PRODORD_CREATE批量生成工单,附Excel模板和完整代码
  • NE1617A温度监控芯片:从ΔVBE原理到SMBus驱动的嵌入式热管理实战
  • N46Whisper:用AI语音识别技术革新日语字幕制作流程
  • NE1619硬件监控芯片实战:从电路设计到SMBus驱动的嵌入式系统健康管理
  • 006.WEB_API使用本地数据库 SQLite + Dapper 入门教程
  • 从DIP到TQFP:P89V51微控制器封装选型与PCB设计实战指南
  • 运营商增值业务推广:新游科技四大典型合作场景案例梳理 - 信息热点
  • 别再死记硬背了!用Python 3.10手把手模拟TDM(时分复用)数据传输过程
  • 黑神话悟空内置地图插件:告别迷路的终极导航指南
  • WebSocket好用的点
  • 如何5分钟极速配置LXMusic音源:免费畅享全网音乐的终极指南
  • 3分钟上手!打造你的专属Teamspeak 3音效面板
  • 别再硬编码了!用Vuex+uni-app实现企业级动态TabBar权限管理(附完整代码)
  • 别再手动算权重了!用MATLAB+熵权法优化你的TOPSIS评价模型(附完整代码)
  • 2026寄大件哪个物流便宜?寄半折5折起全网比价实测 - 快递物流资讯
  • YOLOv5 7.0 换‘芯’记:手把手教你用ResNet替换Backbone(附配置文件)
  • Balena Etcher终极指南:重新定义系统镜像烧录的智能解决方案
  • EB Garamond 12:为什么这款免费古典字体是学术写作和优雅设计的终极选择?
  • UniHacker:3分钟解锁Unity全版本,开启免费学习之旅
  • 信息学奥赛解题实战:OpenJudge NOI 1.7 27 单词翻转的三种编程思路详解
  • 5大突破性架构创新:SGLang如何重塑大语言模型服务性能基准
  • 深入解析NXP P60D128安全微控制器:架构、安全与双接口设计
  • 紧凸集嵌入正则性:从泛函分析到非交换理论
  • Navigating the Publication Pipeline: A Practical Guide to SCI Paper Statuses
  • Claude Code 国内配置指南:通过中转 API 实现免代理直连
  • 库萨科技户外无人清扫车:实景案例验证户外场景清扫车解决方案标杆
  • SCI论文辅导机构哪个好?五大论文辅导机构评测! - GrowthUME