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

4.在二元树中找出和为某一值的所有路径(树)
题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
    10  
  /   /   
 5    12   
/ \     
4  7
则打印出两条路径:10, 12和10, 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
};
题目没这么看清楚   二叉树定义多加了一些下次再写吧
这次复习二叉树   顺便把这题做了

#include"iostream"
#include"malloc.h"
using namespace std;
struct tree
{
	int data;
	struct tree* father;
	struct tree* ltree;
	struct tree* rtree;
	int  s;
};
typedef struct tree* next;
next tree_create()
{
	int i;
	static next fa=NULL;
	cin>>i;
	if(i==0)
		return NULL;
	else
	{
		next ptree=(next)malloc(sizeof(tree));
		ptree->data=i;
		ptree->father=fa;
		ptree->s=0;
		fa=ptree;
		ptree->ltree=tree_create();
		fa=ptree;   //这里由于是static的缘故必须加  不然fa的值会因为递归tree_create()而调用中改变 检查半天 做死啊
		ptree->rtree=tree_create();
		return ptree;
	}
}
void zhong(next p)
{
	if(p!=NULL)
	{
		zhong(p->ltree);
		cout<<p->data<<"  ";
		zhong(p->rtree);
	}
}
void prit(next p)
{
	if(p->father!=NULL)
	{
		prit(p->father);
		cout<<" - ";
	}
	cout<<p->data;
}
void find(next p,int number)
{
	if(p==NULL)
		return ;
	else
		if(p->father==NULL)
		{
			p->s=p->data;
			if(p->data!=number)
			{
				find(p->ltree,number);
				find(p->rtree,number);
			}
			else
			{
				prit(p);
			}
			
		}
		else
			if(p->data+p->father->s!=number)
			{
				
				p->s=p->father->s+p->data;
				find(p->ltree,number);
				find(p->rtree,number);
			} 
			else
			{
				prit(p);
				cout<<endl;
			}
}
main()
{
	int n;
	next p=tree_create();
	cout<<"中序遍历:"<<endl;
	zhong(p);
	cout<<endl;
	cout<<"输入n=:";
	cin>>n;
	cout<<"查找路径如下:"<<endl;
	find(p,n);
	
	
}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值