題目
原題鏈接
給定一個二叉樹,返回所有從根節點到葉子節點的路徑。
說明: 葉子節點是指沒有子節點的節點。
示例:
輸入:
1
/ \
2 3
\
5
輸出: ["1->2->5", "1->3"]
解釋: 所有根節點到葉子節點的路徑爲: 1->2->5, 1->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> ans;
vector<string> binaryTreePaths(TreeNode* root) {
digit(root, "");
return ans;
}
void digit(TreeNode* node, string path) {
if(!node) return; //如果爲空
path += to_string(node -> val); //路徑加入該節點的值
if(!node -> left && !node -> right) //如果是葉子節點
ans.push_back(path); //推入這條路徑
else { //不是葉子節點就繼續遞歸
path += "->";
digit(node -> left, path);
digit(node -> right, path);
}
}
注:這個思路要將一個數值轉變爲字符串,我這裏是用了to_string函數,該函數的作用是將一個數值轉換爲字符串,並返回它。
};