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”]
思路:
- 遍历二叉树的路径
- 使用一个栈
- 根节点入栈,前序遍历左右子树
- 遇到叶子节点,输出栈内所有内容(路径)。
- 如果不是叶子结点,入栈, 递归左右子树。
- 栈顶元素出栈(返回根节点)。
void allpath(TreeNode* root,stack<int> &s,vector<string> &vec)
{
if (root)
{
s.push(root->val);
if (!root->left&&!root->right)//到达叶子结点,输出路径
{
vec.push_back(push_stacktostring(s));
}
else
{
allpath(root->left,s,vec);
allpath(root->right,s,vec);
}
s.pop();
}
}
- 栈内元素输出
- 从栈顶输出,每次输出的内容放在最前面
string push_stacktostring(stack<int> s)
{
string str;
char *c = new char;
int size = s.size();
while (!s.empty())
{
char *c = new char;
sprintf(c,"%d",s.top());
if (s.size()==size)
{
str = str + c;
}
else
{ str = "->"+str;
str = c+str;
}
s.pop();//删除栈顶元素}
return str;
}
- 实现函数
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> vec_str;
stack<int> s;
allpath(root,s,vec_str); //递归中使用引用
return vec_str;
}