牛客 找出二叉树中和为某一值的路径

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
                 vector<vector<int> > p;
                 vector<int> p1;
    public:
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber)
    {if(root)  find(root,expectNumber);
                     return p;}
           
      void find(TreeNode* root,int target){
                 if(root!=NULL) 
                 {
                     p1.push_back(root->val);
                  if(root->val==target&&root->left==NULL&&root->right==NULL)
                       p.push_back(p1);
                 else
                     {
                     if(root->left)  find(root->left,target-root->val);
                     if(root->right)  find(root->right,target-root->val);
                     }//当程序执行到这里的时候,一定会到达叶结点,那么需要往回退一格
               p1.pop_back();//当你找到一个路径或者到达叶节点的时候之后,你需要将这条路径的叶结点(可能是左节点)去掉,以便查找(右结点)是否满足
                 }
      }
    
};

 

posted @ 2017-03-27 12:51  爱编程的小羊  阅读(164)  评论(0编辑  收藏  举报