标签:else treenode == text 不同 直接 boto 下标 出栈
对二叉树的操作,很多情况都是基于其遍历操作进行的,因此,二叉树的遍历操作应熟记于心!
题目是说将二叉树的所有路径输出,输出形式有特定的要求,简单的遍历操作即可完成任务!
这里,单独写了一个函数,用于将数组中的int类型,存至一个 vector<string> 类型的结果集中,void storeRes(vector<int> vc,vector<string> &res),int类型转换成string类型,最简单的方法是使用C++11标准的to_string()函数,代码如下:
1 void storeRes(vector<int> vc,vector<string> &res){ 2 //函数功能:将vc中int类型的数字连接成字符串,存入res中 3 string s=""; 4 for(int i=0;i<vc.size();i++) 5 { 6 if(i==vc.size()-1) 7 s+=(to_string(vc[i])+""); 8 else 9 s+=(to_string(vc[i])+"->"); 10 } 11 //cout<<"string s is "<<s<<endl; 12 res.push_back(s); 13 }
这里我们使用函数的结果要改变最后的结果res,因此采用了引用类型的参数!
基本思路是每次访问到叶子节点的时候,将已有的路径进行输出,可以用一个栈来存储,每次回溯的时候,节点出栈,然后访问至叶子节点时,对栈结构进行遍历即可,这里采用vector进行操作,其优势在于,可以直接采用下标进行访问!
笔记:
vector结构删除末尾元素的三种方法pop_back(),erase()和remove函数
代码如下:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<string> binaryTreePaths(TreeNode* root) { if(root==nullptr) return res; //遍历,直到叶子节点 vector<int> a; dfs(root,a); return res; } void dfs(TreeNode* root,vector<int> &a) { if(root==nullptr) return; //cout<<root->val<<endl; a.push_back(root->val); if(root->left!=nullptr) dfs(root->left,a); if(root->right!=nullptr) dfs(root->right,a); //此时为叶子节点 if(root->left==nullptr && root->right==nullptr) { storeRes(a,res); } a.pop_back(); //弹出一个元素 return; } void storeRes(vector<int> vc,vector<string> &res){ //函数功能:将vc中int类型的数字连接成字符串,存入res中 string s=""; for(int i=0;i<vc.size();i++) { if(i==vc.size()-1) s+=(to_string(vc[i])+""); else s+=(to_string(vc[i])+"->"); } //cout<<"string s is "<<s<<endl; res.push_back(s); } private: vector<string> res; };
标签:else treenode == text 不同 直接 boto 下标 出栈
原文地址:https://www.cnblogs.com/cnyulei/p/12149230.html