Leetcode 257. Binary Tree Paths

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值