zoukankan      html  css  js  c++  java
  • 【Leetcode】257. Binary Tree Paths

    问题描述:

      就一道简简单单的二叉树搜索 从root到leaf节点的所有路径。竟然敲挫了10发。要哭了。。。

    问题分析:

      深度搜索无疑,应该是受了树遍历思维的局限,一开始把递归返回的条件写成了NULL节点返回,肯定是错的啊 !JInxu同学! 人家都说了是到叶节点了,返回条件肯定是叶子节点啊! 然后判断一下左右子树是否存在进行相应的深搜就好了。

    问题解决:

      DFS。

      int  转 string 有两种方法 ,这里用的sprintf(char[], "%d", int), string = char[]。

      string += char 要注意!int 是0-9还能凑活,如果大于10, int + '0'就是一坨shit。

    代码如下:

      

    /**
     * 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:
    
        void dfsBinaryTree(TreeNode* root, vector<int> rec, vector<vector<int>>&ret)
        {   
            if(root != NULL && root -> left == NULL && root -> right == NULL){
                if(rec.size()) ret.push_back(rec);
                return ;
            }
            if(root -> left){
                rec.push_back(root -> left -> val);
                dfsBinaryTree(root -> left, rec, ret);
                rec.pop_back();
            }
            if(root -> right){
                rec.push_back(root -> right -> val);
                dfsBinaryTree(root -> right, rec, ret);
                rec.pop_back();
            }
        }
        
        vector<string> binaryTreePaths(TreeNode* root) {
            vector<string> ret;
            if(root == NULL) return ret;
            vector<int> rec;
            vector<vector<int>> path;
            rec.push_back(root -> val);
            dfsBinaryTree(root, rec, path);
            for(int i = 0; i < path.size(); i ++){
                string tmp = "";
                for(int j = 0; j < path[i].size(); j ++){
                    cout<<"path = "<<path[i][j]<<endl;
                    char t[256];
                    sprintf(t, "%d", path[i][j]);
                    tmp += t;
                    if(j != path[i].size() - 1) tmp += "->";
                }
                ret.push_back(tmp);
            }
            return ret;
        }
    };

    ps: 原来博客会越写越快的 。 makefile 还没学完,耍起题来,不想停,怎么破啊。。哎,,,渣

  • 相关阅读:
    DirectX SDK版本与Visual Studio版本
    String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别
    LocalDateTime与字符串互转/Date互转/LocalDate互转/指定日期/时间比较
    MySQL触发器的正确使用与案例分析
    一篇很棒的 MySQL 触发器学习教程
    Java消息队列三道面试题详解!
    到底什么时候该使用MQ?
    mq使用场景、不丢不重、时序性
    Java 8时间和日期API 20例
    eclipse插件之Findbugs、Checkstyle、PMD安装及使用
  • 原文地址:https://www.cnblogs.com/luntai/p/5404506.html
Copyright © 2011-2022 走看看