257. 二叉树的所有路径

原题链接:257. 二叉树的所有路径

思路:
从根节点到叶子结点,所以需要前序遍历 这样才能让父结点指向子节点,在遍历路径的同时将值进行存储,直到碰到叶子结点为止
这里使用vector 结构path来记录路径,所以要把vector 结构的path转为string格式,再把这个string 放进 result里。
那么为什么使用了vector 结构来记录路径呢? 因为在下面处理单层递归逻辑的时候,要做回溯,使用vector方便来做回溯。

全代码:

class Solution {
public:
    void traversal(TreeNode* cur,vector<int>& path, vector<string>& result){
        //中,为什么中放在首位?因为叶子结点要加入到path中
        path.push_back(cur ->val);

        if(cur ->left == NULL && cur ->right == NULL)
        {//如果是叶子结点
            string sPath;//创建string用于存储路径
            for(int i = 0; i < path.size() - 1; i++)
            {//将结点值转换为string并在中间加上-> 成为路径
                sPath += to_string(path[i]);
                sPath += "->";
            }
            sPath += to_string(path[path.size() -1]);
            //将路径某条路径pushback进result内
            result.push_back(sPath);
            return ;
        }
        if(cur ->left)
        {//左
            traversal(cur ->left, path, result);//传入左子树
            path.pop_back();//回溯
        }
        if(cur ->right)
        {//右
            traversal(cur ->right, path, result);//传入右子树
            path.pop_back();//回溯
        }
    }



    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> result;
        vector<int> path;
        if(root == NULL) return result;
        traversal(root, path, result);
        return result;
    }
};

你可能感兴趣的:(二叉树,数据结构)