给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", "1->3"] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
解题思路:
深度优先搜索,递归。递归的反问所有根结点,记录递归的路径,遇到叶子结点将当前字符串加入结果数组中,注意,题目给的二叉树结点的val是INT类型,需要转换成字符串。除了首个结点不需要''->''之外其余全部要。
class Solution { public: vector<string> binaryTreePaths(TreeNode* root) { string road = ""; DFS(root, road); return res; } private: void DFS(TreeNode* root, string road) { if (!root) return; ss.clear(); ss << root->val;//准备将int转换成字符串 string str; ss >> str; if (road.empty()) { road += str; } else road += "->" + str; if (!root->left&&!root->right) { res.push_back(road); return; } if (root->left) DFS(root->left, road); if (root->right) DFS(root->right, road); } private: stringstream ss; vector<string> res; }; |