现在的位置: 首页 > 综合 > 正文

Path Sum II

2018年04月29日 ⁄ 综合 ⁄ 共 1298字 ⁄ 字号 评论关闭
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

struct TreeNode 
{
 int val;
 TreeNode *left, *right;
 TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

vector<vector<int> > v;
class Solution {
public:
	void dfs(TreeNode *p, int cur, int sum, vector<int> v1) //v1若传引用结果为 5 4 11 2 、 5 4 11 2 8 4 5
	{
		if(!p)
			return;
		if(!p->left && !p->right)
		{
			if(cur + p->val == sum)
			{
				v1.push_back(p->val);
				v.push_back(v1);
			}
			return;
		}
		v1.push_back(p->val);
		dfs(p->left, cur + p->val, sum, v1);
		dfs(p->right, cur + p->val, sum, v1);	
	}
    vector<vector<int> > pathSum(TreeNode *root, int sum) 
	{
		v.clear();          //少了这句就WA 
		vector<int> v1;
		dfs(root, 0, sum, v1);		
        
        return v;
    }
};

int main(void)
{
	TreeNode *root = new TreeNode(5);
	TreeNode *node1 = new TreeNode(4);  root->left = node1;
	TreeNode *node2 = new TreeNode(8);	root->right = node2;
	TreeNode *node3 = new TreeNode(11);	node1->left = node3;
	TreeNode *node4 = new TreeNode(13);	node2->left = node4;
	TreeNode *node5 = new TreeNode(4);	node2->right = node5;
	TreeNode *node6 = new TreeNode(7);	node3->left = node6;
	TreeNode *node7 = new TreeNode(2);	node3->right = node7;
	TreeNode *node9 = new TreeNode(5);	node5->left = node9;
	TreeNode *node8 = new TreeNode(1);	node5->right = node8;
	
	Solution s;
	vector<vector<int> > vv = s.pathSum(root, 22);
	
	for(vector<vector<int> >::iterator iter = vv.begin(); iter != vv.end(); ++iter)
	{
		vector<int> t = *iter;
		for(vector<int>::iterator iter2 = t.begin(); iter2 != t.end(); ++iter2)
		{
			cout << *iter2 << " ";
		}
		cout << endl;
	}
	return 0;
}

抱歉!评论已关闭.