题目要求
Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1 / \ 2 3 \ 5
All root-to-leaf paths are:
["1->2->5", "1->3"]
解题思路
非常明确的DFS,注意返回的是字符串,因此可以用to_string将节点值的int转换为string。
先定义一个辅助函数dfs,当左右子树均为空时,将当前的所有字符串push到结果vector中。
否则,对左子树或右子树进行相同的递归操作。
复杂度分析
O(N)
代码如下:
class Solution {
public:
void dfs(vector<string>&res,TreeNode* root, string rootvalue){
if (root->left==NULL&&root->right==NULL) {
res.push_back(rootvalue);
return;
}
if(root->left==NULL){
dfs(res, root->right, rootvalue+"->"+to_string(root->right->val));
}
if (root->right==NULL) {
dfs(res, root->left, rootvalue+"->"+to_string(root->left->val));
}
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string>result;
if (root==NULL) {
return result;
}
dfs(result, root, to_string(root->val));
return result;
}
};