• 【LeetCode】257. Binary Tree Paths


    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"]

    Credits:
    Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

    深度优先遍历,每遇到叶节点,将栈中路径记录下来,最后将所有路径转成所需格式

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<string> binaryTreePaths(TreeNode* root) {
            vector<string> path;
            if(root == NULL)
                return path;
            vector<vector<int> > pathv;    
            unordered_map<TreeNode*, bool> visited;
            stack<TreeNode*> stk;
            stk.push(root);
            visited[root] = true;
            if(root->left == NULL && root->right == NULL)
                save(pathv, stk);
            while(!stk.empty())
            {
                TreeNode* top = stk.top();
                if(top->left && visited[top->left] == false)
                {
                    stk.push(top->left);
                    visited[top->left] = true;
                    if(top->left->left == NULL && top->left->right == NULL)
                        save(pathv, stk);
                    continue;
                }
                if(top->right && visited[top->right] == false)
                {
                    stk.push(top->right);
                    visited[top->right] = true;
                    if(top->right->left == NULL && top->right->right == NULL)
                        save(pathv, stk);
                    continue;
                }
                stk.pop();
            }
            return convert(pathv);
        }
        void save(vector<vector<int> >& pathv, stack<TreeNode*> stk)
        {
            vector<int> cur;
            while(!stk.empty())
            {
                TreeNode* top = stk.top();
                cur.push_back(top->val);
                stk.pop();
            }
            reverse(cur.begin(), cur.end());
            pathv.push_back(cur);
        }
        vector<string> convert(vector<vector<int> >& pathv)
        {
            vector<string> path;
            for(int i = 0; i < pathv.size(); i ++)
            {
                string cur;
                cur += to_string(pathv[i][0]);
                for(int j = 1; j < pathv[i].size(); j ++)
                {
                    cur += "->";
                    cur += to_string(pathv[i][j]);
                }
                path.push_back(cur);
            }
            return path;
        }
    };

  • 相关阅读:
    26. 60s快速定位服务器性能问题
    27. 性能测试总体流程
    18. Jmeter-取样器二
    17. Jmeter-取样器一
    15. Jmeter-配置元件二
    14. Jmeter-配置元件一
    13. Jmeter-定时器
    git 常用命令
    数据库常用操作
    【CSS】文字超出显示省略号&连续字符换行
  • 原文地址:https://www.cnblogs.com/ganganloveu/p/4749909.html
Copyright © 2020-2023  润新知