LeetCode 257
棧的方式實現以及遞歸實現(註釋掉了),還可以通過隊列方式實現,最終的輸出順序和棧實現的不一樣。
#include <iostream>
#include <string>
#include <sstream>
#include <queue>
#include <stack>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
string int2string(int val)
{
stringstream stream;
string result;
stream << val;
stream >> result;
stream.clear();
return result;
}
#if 0
void recurseve(vector<string> &res, TreeNode *root, string str)
{
if (root == NULL)
return;
str = str + int2quring(root->val) ;
if (root->left == NULL && root->right == NULL)
{
cout << str<<endl;
res.push_back(str);
return;
}
str = str + "->";
if (root->left)
{
recurseve(res,root->left,str);
}
if (root->right)
{
recurseve(res,root->right,str);
}
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> res;
string str= "";
recurseve(res, root, str);
return res;
}
#endif // 0
vector<string> binaryTreePaths(TreeNode* root) {
stack<TreeNode*> st_node;
stack<string> st_str;
vector<string> res;
TreeNode *tmp;
string tmp_str;
if (root == NULL)
return res;
st_node.push(root);
st_str.push(int2string(root->val));
while(!st_node.empty() && !st_str.empty())
{
tmp = st_node.top();
tmp_str = st_str.top();
st_node.pop();
st_str.pop();
if (tmp->left == NULL && tmp->right == NULL)
{
cout <<tmp_str<<endl;
res.push_back(tmp_str);
}
if (tmp->left != NULL)
{
st_node.push(tmp->left);
st_str.push(tmp_str + "->" + int2string(tmp->left->val));
}
if (tmp->right != NULL)
{
st_node.push(tmp->right);
st_str.push(tmp_str + "->" + int2string(tmp->right->val));
}
}
return res;
}
};
int main()
{
TreeNode *a = new TreeNode(1);
TreeNode *b = new TreeNode(2);
TreeNode *c = new TreeNode(3);
TreeNode *d = new TreeNode(5);
a->left = b;
a->right = c;
b->left = NULL;
b->right = d;
Solution s;
s.binaryTreePaths(a);
return 0;
}