题目:
Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1 / \ 2 3 \ 5
All root-to-leaf paths are:
["1->2->5", "1->3"]
翻译:
给定一个二叉树,返回从根到叶子的所有路径。
举例,给定如下的二叉树:
1 / \ 2 3 \ 5
所有从根到叶子的路径为:
["1->2->5", "1->3"]
思路:
递归,注意边界,代码如下。
C++(Visual Studio 2017):
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x):val(x),left(NULL),right(NULL){}
};
class Solution {
public:
void binaryTreePaths(vector<string>& result, TreeNode* root, string t) {
if (root->left==NULL && root->right==NULL) {
result.push_back(t);
return;
}
if (root->left) binaryTreePaths(result, root->left, t + "->" + to_string(root->left->val));
if (root->right) binaryTreePaths(result, root->right, t + "->" + to_string(root->right->val));
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> result;
if (root==NULL) return result;
binaryTreePaths(result, root, to_string(root->val));
return result;
}
};
int main()
{
Solution s;
vector<string> result;
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->right = new TreeNode(5);
result = s.binaryTreePaths(root);
for (int i = 0; i < result.size(); i++) {
cout << result[i] << " ";
}
return 0;
}