zoukankan      html  css  js  c++  java
  • 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

    // ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include "stdafx.h"
    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<numeric>
    #include<list>
    #include<iterator>
    #include<queue>
    #include<stack>
    #include<algorithm>
    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:
    	int sum = 0;
    	vector<int> path;
    	vector <vector<int>> paths;
    	int flag = 0;
    
    	vector<vector<int> > FindPath(TreeNode* root, int expectNumber) {
    
    		paths = {};
    		
    		if (root != NULL)
    		{ 
    			FindOnePath(root, expectNumber);
    		
    		}
    		
    		
    		///*if (root != NULL) FindOnePath(root, expectNumber);
    		//	
    		//else  paths = {};*/
    		//
    		return paths;
    	}
    
    	void FindOnePath(TreeNode* &root, int expectNumber) {
    	
    		if (root == NULL)
    		{
    			if(flag==0)
    
    			{ 
    			
    			sum = 0;
    			for (auto it = path.begin(); it != path.end(); ++it)
    				sum += *it;
    			if (sum == expectNumber)
    			{
    				paths.push_back(path);
    			}
    			flag = 1;
    			}
    			else
    			{
    				flag = 0;
    			}
    			return;
    
    		}
    		else
    		{
    			path.push_back(root->val);
    			cout << "push:"<<root->val<<endl;
    			FindOnePath(root->left, expectNumber); //第二次犯这个错误了,记住这里调用的是FindOnePath,而不是FindPath
    			
    			FindOnePath(root->right, expectNumber);
    			path.pop_back();
    			cout << "pop :" << root->val << endl;
    		}
    	
    	}
    
    	
    	void CreateBiTree(TreeNode* &T) //这里的引用 & 必须,要不然会报未初始化变量
    	{
    		int num = 0;
    		cin >> num;
    		if (num == 0) return;
    		else
    		{
    			T = new TreeNode(num);
    			CreateBiTree(T->left);
    			CreateBiTree(T->right);
    		}
    	}
    	
    };
    
    int main()
    {
    	
    	Solution so;
    	TreeNode *T;
    	so.CreateBiTree(T);
    	cout << "创建二叉树成功!"<<endl;
    
    	vector<vector<int>> vec;
    	vec = so.FindPath(T,1);
    
    	for (auto it = vec.begin(); it != vec.end(); it++)
    	{
    		for (auto i = (*it).begin(); i != (*it).end(); i++)
    			cout << *i << "  ";
    		cout << endl;
    	}
    
    
    
    	return 0;
    }
  • 相关阅读:
    android:taskAffinity与android:finishOnTaskLaunch之我见
    Android 实现两屏幕互相滑动
    Android: 如何打开assets or raw文件夹下的数据库文件
    Android自定义进度条
    a标签在ie6下点了没反应
    strtotime 稍有不同
    php遍历时修改 传地址
    css3pie
    js 数据拷贝
    不重启iis的情况下切换iis的.net版本
  • 原文地址:https://www.cnblogs.com/wdan2016/p/5992657.html
Copyright © 2011-2022 走看看