1. 程式人生 > >劍指offer34--二叉樹中和為某一值的路徑

劍指offer34--二叉樹中和為某一值的路徑

題目描述

輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)

 

思路:

遞迴加回溯

技巧:

今天才知道可以把定義的放到上面。。。。vector這樣就不用引用了。。。

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
    vector<vector<int> >res;
    vector<int> path;
public:
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) 
    {
        if(root==NULL) return res;
        FindPathCore(root,expectNumber);
        return res;
    }
    void FindPathCore(TreeNode* root,int value)
    {
        path.push_back(root->val);
        if(root->left==NULL&&root->right==NULL)
        {
            if(value==root->val)
                res.push_back(path);
        }else{
            if(root->left!=NULL)
                FindPathCore(root->left,value-root->val);
            if(root->right!=NULL)
                FindPathCore(root->right,value-root->val);
        }
        path.pop_back();
    }
};