剑指offer-金典的dfs

题目描述

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。


解法:很明显是深度搜索,DFS。关键在于创造一个记录路径(记录路径中行走),用一个引用来传参做全局记录。


    vector > FindPath(TreeNode* root,int expectNumber) {
        vector> ret;
        vector trace;
        if(root)
            dfs(root,expectNumber,ret,trace);//dfs explore
        return ret;
    }
    void dfs(TreeNode* root,int s,vector> &ret,vector &trace) {
        trace.push_back(root->val);
        if(!root->left&&!root->right) {//end node
            if(s==root->val)
                ret.push_back(trace);
        }
        if(root->left)
            dfs(root->left,s-root->val,ret,trace);
        if(root->right)
            dfs(root->right,s-root->val,ret,trace);
        trace.pop_back();//pop current node in order to turn right
    }

你可能感兴趣的:(C++,算法)