zoukankan      html  css  js  c++  java
  • LeetCode 113:Path Sum II

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.

    For example:
    Given the below binary tree and sum = 22,
                  5
                 / 
                4   8
               /   / 
              11  13  4
             /      / 
            7    2  5   1
    

    return

    [
       [5,4,11,2],
       [5,8,4,5]
    ]
    

    Subscribe to see which companies asked this question

     class Solution {
     public:
    	 vector<vector<int>> pathSum(TreeNode* root, int sum) {
    		 vector<vector<int>> res;
    		 vector<int> tmp; //保存中间结果
    		 tmpFunction(root, sum, tmp, res);
    		 return res;
    	 }
    
    	 void tmpFunction(TreeNode* root, int sum, vector<int> &tmp, vector<vector<int>>&res){
    		 if (root == NULL) return;
    		 tmp.push_back(root->val);
    		 if (root->left == NULL && root->right == NULL){
    			 if (root->val == sum)
    				 res.push_back(tmp);
    		 }
    		 tmpFunction(root->left, sum - root->val, tmp, res);
    		 tmpFunction(root->right, sum - root->val, tmp, res);
    		 tmp.pop_back();
    	 }
     };
    

    #include<iostream>
    #include<new>
    #include<vector>
    using namespace std;
    
    //Definition for binary tree
    struct TreeNode
    {
    	int val;
    	TreeNode *left;
    	TreeNode *right;
    	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };
    
    class Solution
    {
    public:
    	vector<vector<int> > pathSum(TreeNode *root, int sum)
    	{
    		vector<vector<int> > path;
    		vector<int> tmp;
    		hasPathSum(root, sum, path, tmp);
    		return path;
    	}
    	void hasPathSum(TreeNode *root, int sum, vector<vector<int> > &path, vector<int> tmp)
    	{
    		if (root == NULL)
    			return;
    		tmp.push_back(root->val);
    		if (root->left == NULL&&root->right == NULL && (sum - root->val) == 0)
    		{
    			path.push_back(tmp);
    		}
    		if (root->left)
    			hasPathSum(root->left, sum - root->val, path, tmp);
    		if (root->right)
    			hasPathSum(root->right, sum - root->val, path, tmp);
    
    		tmp.pop_back();
    	}
    	void createTree(TreeNode *&root)
    	{
    		int i;
    		cin >> i;
    		if (i != 0)
    		{
    			root = new TreeNode(i);
    			if (root == NULL)
    				return;
    			createTree(root->left);
    			createTree(root->right);
    		}
    	}
    };
    int main()
    {
    	Solution s;
    	TreeNode *root;
    	s.createTree(root);
    	vector<vector<int> > path = s.pathSum(root, 22);
    	for (auto a : path)
    	{
    		for (auto v : a)
    			cout << v << " ";
    		cout << endl;
    	}
    	system("pause");
    	return 0;
    }


  • 相关阅读:
    用java在mysql中随机插入9000 000条数据
    java连接mysql的一个小例子
    JDK环境变量配置
    JVM工作原理
    线程和进程的区别
    java实现链表
    内连接、外连接、左连接、右连接
    udp协议
    要看的东西
    eclipse快捷键
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6959192.html
Copyright © 2011-2022 走看看