zoukankan      html  css  js  c++  java
  • 【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;
        }
    };

  • 相关阅读:
    常见算法的时间复杂度
    electron 展示pdf
    AudioContext
    js 计算文字宽度
    python 窗口被关闭报错
    qq行情数据。sina行情JOSN,建议用qq,涨跌,财务数据有-市盈
    python AttributeError: 'NoneType' object has no attribute 'prepare'
    策略日志
    使用Python下载A股行情的几种方法
    easytrader
  • 原文地址:https://www.cnblogs.com/ganganloveu/p/4749909.html
Copyright © 2011-2022 走看看