1,题目要求
Given a binary tree, return all root-to-leaf paths.
2,题目思路
依然是利用递归的方法,对整棵树进行遍历,每当找到左右孩子节点都为空的节点时,便将这一条路径得到字符串加入到vector中;否则,就对左右子树分别进行路径的查询。
树的递归最好写一个递归函数来进行操作。
3,程序源码
/**
* 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) {
vector<string> res{};
if(root == NULL)
return res;
string str = to_string(root->val);
reverseTree(res , root, str);
return res;
}
void reverseTree(vector<string> &res, TreeNode* root, string str)
{
if(root->left == NULL && root->right == NULL) //找到了最后一个节点
{
res.push_back(str);
return;
}
if(root->left) reverseTree(res , root->left , str + "->" + to_string(root->left->val));
if(root->right) reverseTree(res , root->right , str + "->" + to_string(root->right->val));
}
};