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

二叉树的所有路径(回溯算法基础)

257. 二叉树的所有路径 - 力扣(LeetCode)

统计二叉树的路径就是从根节点向下遍历直到叶子节点,但这个过程中有很多的细节,比如遍历到叶子节点后怎么再回退到根节点继续想另一个子树遍历,这里就用到了回溯算法。

代码实现:

class Solution {
private:void traversal(TreeNode*node,vector<int>&path,vector<string>&result){path.push_back(node->val);if(node->left==NULL&&node->right==NULL){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);return;}if(node->left){traversal(node->left,path,result);path.pop_back();}if(node->right){traversal(node->right,path,result);path.pop_back();}}
public:vector<string> binaryTreePaths(TreeNode* root) {vector<int>path;vector<string>result;if(root==NULL){return result;}traversal(root,path,result);return result;}
};

这道题统计的是路径,显然采用的是前序遍历,最开始应该是写好遍历到叶子节点后的逻辑:

每一次遍历到的节点值先插入到path数组中,再定义一个临时字符串,遍历每一个元素的值(储存在path中),为了防止最后一个元素后面也有->所以看起来麻烦一点,最后将字符串全部尾插到结果容器中。最后通过return结束当前递归调用,返回到上一层的递归调用中。

        path.push_back(node->val);if(node->left==NULL&&node->right==NULL){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);return;}

接下来就是涉及回溯的过程,但实际还是遍历,在节点不是叶子节点时,判断左右子树是否为空,不为空则递归向下循环。最后还要将当前值从path数组中pop出去,在递归循环中,向左右遍历几个节点,就会pop出几个节点。递归函数中不能细想,会绕进去,将代码分成块,解决每一部分,前序遍历时,是先中再左再右,将左子树都遍历完成后,也将左子树中的元素pop出,再遍历右子树。pop不会影响当前节点的递归过程,会影响到遍历到一个叶子后的过程。

        if(node->left){traversal(node->left,path,result);path.pop_back();}if(node->right){traversal(node->right,path,result);path.pop_back();}

相关文章:

  • 蓝牙耳机开发--TWS蓝牙耳机双向通信充电盒设计
  • 滑动窗口模板
  • 《系统分析师-第三阶段—总结(六)》
  • Android Studio学习记录1
  • 软件测试全流程与主流测试方法详解:从理论到实战
  • Rabbitmq下载和安装(Windows系统,百度网盘)
  • 云服务器被黑客攻击应急响应与加固指南(上)
  • Swiper 在 Vue 中的使用指南
  • 用Python做有趣的AI项目5:AI 画画机器人(图像风格迁移)
  • Atcoder Help 有关Atcoder 的介绍-1 涨分规则
  • docker安装Canal1.1.5,MySQL5.7踩坑
  • 企业架构之旅(2):解锁TOGAF ADM
  • OpenCV-Python (官方)中文教程(部分一)_Day16
  • MicroPython for ESP32 舵机控制详解
  • 【学习笔记】软件测试流程-测试设计阶段
  • 全地形车市场
  • FPGA-DDS信号发生器
  • watch 监视器
  • 【大语言模型开发】BPE算法(Byte-Pair)
  • 可调用对象(5)-bind函数适配器
  • 当初没有珍惜巴特勒的热火,被横扫出局后才追悔莫及
  • 体坛联播|安切洛蒂预计执教巴西国家队,利拉德确诊跟腱撕裂
  • 现场|西岸美术馆与蓬皮杜启动新五年合作,新展今开幕
  • 民生访谈|宝妈宝爸、毕业生、骑手……上海如何为不同人群提供就业保障
  • 《九龙城寨之围城》斩获香港金像奖九项大奖,包括最佳影片
  • 从 “沪惠保” 到 “沪骑保”看普惠保险的 “上海样式”