题目
题目链接:257-二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]
class Solution {
public:
vector<string> binaryTreePaths(TreeNode* root) {
}
};
思路
递归-前序
- 确定递归函数参数与返回值:
void traversal(TreeNode* node, vector<int>& path, vector<string>& result)
- 确定终止条件
if(node->left == nullptr && node->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); return; }
- 确定单层递归逻辑
path.push_back(node->val); if(node->left){ traversal(node->left, path, result); path.pop_back(); } if(node->right){ traversal(node->right, path, result); path.pop_back(); }
完整代码:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
void traversal(TreeNode* node, vector<int>& path, vector<string>& result){
path.push_back(node->val);
if(node->left == nullptr && node->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);
return;
}
if(node->left){
traversal(node->left, path, result);
path.pop_back();
}
if(node->right){
traversal(node->right, path, result);
path.pop_back();
}
}
vector<string> binaryTreePaths(TreeNode* root){
vector<string> result;
vector<int> path;
if (root == nullptr) return result;
traversal(root, path, result);
return result;
}
};
int main(){
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
root->left->left->left = new TreeNode(8);
root->left->left->right = new TreeNode(9);
root->right->left->right = new TreeNode(10);
Solution obj;
vector<string> res = obj.binaryTreePaths(root);
for(int i = 0; i < res.size(); i++){
cout << res[i] << endl;
}
return 0;
}