257. Binary Tree Paths

来源:互联网 发布:虚拟软件是什么 编辑:程序博客网 时间:2024/06/14 00:48

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

使用DFS,因为需要使用到递归,必须要指定递归出口,对于这个情况,递归出口就是叶子节点。

先贴出我自己写的low代码。。。

class Solution {public:    vector<string> binaryTreePaths(TreeNode* root) {        vector<string> result;        if (root == NULL) return result;        string out = "";        DFS(root, result, out);        return result;    }    void DFS(TreeNode* root, vector<string>& result, string& out) {        if (root->left == NULL && root->right == NULL) {            out += to_string(root->val);            cout << out;            result.push_back(out);            return;        } else {            if (root->left != NULL) {                string oldStr = out;                out += to_string(root->val) + "->";                DFS(root->left, result, out);                out = oldStr;            }            if (root->right != NULL) {                string oldStr = out;                out += to_string(root->val) + "->";                DFS(root->right, result, out);                out = oldStr;            }        }    }}
这个题发现了一个情况,就是如果在DFS中使用string& out,调用DFS的时候不能传入“”(空字符串),必须定义初始化。

然后在再传Grandyang的代码:

class Solution {public:    vector<string> binaryTreePaths(TreeNode* root) {        vector<string> result;        if (root == NULL) return result;        string out = "";        DFS(root, result, "");        return result;    }       void DFS(TreeNode* root, vector<string>& result, string out) {        out += to_string(root->val);        if (root->left == NULL && root->right == NULL) {            result.push_back(out);        } else {            if (root->left != NULL) DFS2(root->left, result, out + "->");            if (root->right != NULL) DFS2(root->right, result, out + "->");        }    }    };
简洁的一逼啊。。。。还是要继续努力。。共勉!


原创粉丝点击