码迷,mamicode.com
首页 > 其他好文 > 详细

23.二叉树中和为某一值的路径

时间:2016-05-07 09:50:59      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

二叉树中和为某一值的路径

题目描述

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
牛客网不给测试用例让我感到很迷惑啊。。再次提醒自己,vector是否为空用vector.empty()判断!
// 24.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <vector>
using namespace::std;

struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
class Solution {
public:
	vector<vector<int> > FindPath(TreeNode* root, int exp) {
		vector<vector<int>> retVec;
		if (root == NULL)return retVec;
		vector<int> path;
		int cur = 0;
		recursive(root, retVec, path, exp, cur);
		return retVec;
	}

	void recursive(TreeNode* root, vector<vector<int>>& retVec, vector<int>& path, int sum, int& cur) {
		path.push_back(root->val);
		cur = cur + root->val;
		bool isLeaf = (root->left == NULL) && (root->right == NULL);
		if (isLeaf && sum == cur) {
			retVec.push_back(path);
		}

		if (root->left != NULL) {
			recursive(root->left, retVec, path, sum, cur);
		}
		if (root->right != NULL) {
			recursive(root->right, retVec, path, sum, cur);
		}
		path.pop_back();
		cur -= root->val;
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	TreeNode* root = new TreeNode(10);
	TreeNode* rootLeft = new TreeNode(5);
	TreeNode* rootRight = new TreeNode(12);
	TreeNode* leftLeft = new TreeNode(4);
	TreeNode* leftRight = new TreeNode(7);

	root->left = rootLeft;
	root->right = rootRight;
	rootLeft->left = leftLeft;
	rootLeft->right = leftRight;

	Solution s;
	s.FindPath(NULL, 22);
	return 0;
}


23.二叉树中和为某一值的路径

标签:

原文地址:http://blog.csdn.net/chengonghao/article/details/51335046

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!