二叉树的所有路径
力扣题目链接
题目描述
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5]
输出:[“1->2->5”,“1->3”]
解题思路
这道题目还是很有意思的,一开始我打算用栈来辅助遍历二叉树的,但是我预估了一下操作应该比较复杂,所以还是采用了递归的方法来解这道题目。
首先我们需要明白,在遍历树的时候,需要保存该树到根节点的路径并传给子树,知道叶子节点然后把该路径存入答案数组中;
你们我们把当前路径和答案数组都传入方法中给子树处理;
这里需要注意,答案数组的生命周期不是递归时一个函数的生命周期,而是存在整个过程中的,所以需要引用传参传入子方法中。
题解
class Solution {
public:void func(TreeNode* root, string curpath, vector<string>& ans){if(root){curpath += to_string(root->val);if(root->left){func(root->left, curpath + "->", ans);}if(root->right){func(root->right, curpath + "->", ans);}if(!root->left && !root->right){ans.push_back(curpath);}}}vector<string> binaryTreePaths(TreeNode* root) {vector<string> ans;func(root, "", ans);return ans;}
};
总结
这里其实就是引用传参可以很多同学不太熟悉所以难以想出解法,其他的地方都是比较常规的内容。