【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 还没学完,耍起题来,不想停,怎么破啊。。哎,,,渣

posted on 2016-04-18 15:00  暴力的轮胎  阅读(153)  评论(0编辑  收藏  举报

导航