在二元树中找出和为某一值的所有路径

题目:输入一个整数和一棵二元树。

从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。

打印出和与输入整数相等的所有路径。

例如 输入整数22和如下二元树

  10  

  / \   

 5  12   

 / \   

4  7

则打印出两条路径:10, 1210, 5, 7

 

二元树节点的数据结构定义为:

struct BinaryTreeNode // a node in the binary tree

{

int m_nValue; // value of node

BinaryTreeNode *m_pLeft; // left child of node

BinaryTreeNode *m_pRight; // right child of node

};

vs2008编译环境:

tree.h头文件如下:

using namespace std;
struct binaryTree
{
	int val;
	binaryTree *left;
	binaryTree *right;
	binaryTree(int t);
	
};
binaryTree::binaryTree(int t)
{
	val=t;
	left=right=NULL;
}

main.cpp文件如下:

#include<iostream>
#include"tree.h"
#include<queue>
using namespace std;
bool flag=false;
template<class T>
void find(binaryTree * temp,int sum,queue<typename T> que)//que记录路径的值 sum为路径和,每递归一层sum做相应减少。如要sum小于0还没到叶结点,则return.
{							//如果sum==0且为叶子结点,则有路径满足条件,并打出该路径
	if(temp->val>sum) return;
	if(temp->left==NULL &&temp->right==NULL) 
	{
		if(sum==temp->val)
		{
			que.push(temp->val);
			while(!que.empty()) 
			{
				cout<<que.front()<<" ";
				que.pop();
			}
			cout<<endl;
			flag=true;
			return;
		}	
		else
			return;
	}else
	{
		que.push(temp->val);
		find(temp->left,sum-temp->val,que);
		find(temp->right,sum-temp->val,que);
	}
}
void init()//查找路径和为22的所有路径
{
	binaryTree *root=new binaryTree(10);
	binaryTree * temp=new binaryTree(5);
	root->left=temp;
	temp->left=new binaryTree(4);
	temp->right=new binaryTree(7);
	root->right=new binaryTree(12);
	queue<int> que;

	find(root,22,que);
	cout<<(flag==true?"true":"false")<<endl;
}
int main()
{
	init();
	system("pause");
	return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值