题目表述
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入:
1/ \2 3\5
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
题目来源于 leetcode 每日一题。257. 二叉树的所有路径
解题思路
该题有着很明显的DFS和BFS的特征,因此只要使用DFS和BFS的相关方法就可以实现。
关键点
- 如何将数字转换层字符串。
使用C++的流可以很好解决这个问题。
#include<sstream>stringstream ss;ss << node->val;string temp;ss >> temp;
- 对vector进行值引用。
- 怎么可以降低内存
在进行递归式的DFS的时候,先不判断是否为叶节点,先逐一判断其子树是否为空。这样可以使得内存降一点,但是为什么,没有想通,望code大神指点。
代码公开
/*** 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:void dfs(TreeNode* node, string current_path, vector<string> &answer) {stringstream ss;ss << node->val;string temp;ss >> temp;if (node->left != NULL) {dfs(node->left, current_path + temp + "->", answer);}if (node->right != NULL) {dfs(node->right, current_path + temp + "->", answer);}if (node->left == NULL && node->right == NULL){answer.push_back(current_path + temp);}}vector<string> binaryTreePaths(TreeNode* root) {vector<string> answer;if (root == NULL) {return answer;}string path = "";dfs(root, path, answer);return answer;}};
