leetcode 257. 二叉树的所有路径
题目详情
题目链接 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。
示例: 输入: 1 / 2 3 \ 5 输出: [“1->2->5”, “1->3”] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
我的代码
class Solution {
private:
vector
<string
> results
;
public:
void preOrder(TreeNode
*root
, string
&result
) {
if (root
) {
auto temp
= result
;
temp
+= std
::to_string(root
->val
);
if (!root
->left
&& !root
->right
) {
results
.push_back(temp
);
return;
}
temp
+= "->";
if (root
->left
) {
preOrder(root
->left
, temp
);
}
if (root
->right
) {
preOrder(root
->right
, temp
);
}
}
}
vector
<string
> binaryTreePaths(TreeNode
* root
) {
string result
;
preOrder(root
, result
);
return results
;
}
};
我的成绩
执行结果:通过 执行用时:4 ms, 在所有 C++ 提交中击败了89.73%的用户 内存消耗:13.7 MB, 在所有 C++ 提交中击败了68.43%的用户
一些想法
本道题进行先序遍历即可。
执行用时为 0 ms 的范例
class Solution {
public:
vector
<string
> binaryTreePaths(TreeNode
* root
) {
vector
<string
> res
;
if(root
== NULL)return res
;
if(root
->left
== NULL && root
->right
== NULL){
res
.push_back(to_string(root
->val
));
return res
;
}
vector
<string
> resL
= binaryTreePaths(root
->left
);
for(int i
= 0; i
< resL
.size(); i
++){
res
.push_back(to_string(root
->val
) + "->" + resL
[i
]);
}
vector
<string
> resR
= binaryTreePaths(root
->right
);
for(int i
= 0; i
< resR
.size(); i
++){
res
.push_back(to_string(root
->val
) + "->" + resR
[i
]);
}
return res
;
}
};
思考
参见官方解答