LeetCode Binary Tree Paths

Given a binary tree, return all root-to-leaf paths.

完美解法:

vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> res;
        if(!root) return res;
        helper(root, res, to_string(root -> val));
        return res;
    }
    
    void helper(TreeNode* root, vector<string>& res, string st) {
        if(root -> left == root -> right) {
            res.push_back(st);
            return ;
        }
        if(root -> left) helper(root -> left, res, st + "->" + to_string(root -> left -> val));
        if(root -> right) helper(root -> right, res, st + "->" + to_string(root -> right -> val));
    }

传参中传递一个st,到达叶子结点时可以直接压入结果,而如果像下面的解法,就很不优美了(叶子节点处理逻辑复杂)。

vector<string> binaryTreePaths(TreeNode* root) {
        vector<int> path;
        vector<string> res;
        if(!root) return res;
        dfs(root, path, res);
        return res;
    }
    void dfs(TreeNode* root, vector<int>& path, vector<string>& res) {
        if(root -> left == root -> right){
            string tmp;
            path.push_back(root -> val);
            for(int i = 0; i<path.size() - 1; i++)
                tmp += to_string(path[i]) + "->";
            tmp += to_string(path[path.size()-1]);
            res.push_back(tmp);
            path.pop_back();
            return;
        }
        path.push_back(root -> val);
        if(root -> left) dfs(root -> left, path, res);
        if(root -> right) dfs(root -> right, path, res);
        path.pop_back();
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容