題目:
Given a binary tree, return all root-to-leaf paths.
返回所有從根節(jié)點(diǎn)到葉子界面的路徑-
分析:
- 采用DFS的思想進(jìn)行遞歸
- vector也同樣具有棧的特性未蝌,所以使用vector來保存每一次遍歷的節(jié)點(diǎn)镇辉,在適當(dāng)位置彈出,造成vector復(fù)用
- 專門構(gòu)造一個(gè)函數(shù)用于將vector中的節(jié)點(diǎn)和箭頭拼接起來
代碼:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> result;
vector<int> path;
BFS (root, result, path);
return result;
}
void BFS (TreeNode *treeNode, vector<string> &result, vector<int> &path) {
if (treeNode == NULL) {
return;
}
path.push_back(treeNode->val);
if (treeNode->left == NULL && treeNode->right == NULL) {
result.push_back(generatePath(path));
}
if (treeNode->left != NULL) {
BFS (treeNode->left, result, path);
path.pop_back(); // 這里對(duì)path進(jìn)行彈棧莉擒,導(dǎo)致path復(fù)用抒寂,思路真是精妙
}
if (treeNode->right != NULL) {
BFS (treeNode->right, result, path);
path.pop_back();
}
}
string generatePath(vector<int> path) {
stringstream ss;
int i;
for (i = 0; i < path.size() - 1; i++) ss << path[i] << "->";
ss << path[i];
return ss.str();
}