112 - Tree Summing

题目:112 - Tree Summing


题目大意:给出一棵树,求从根到叶子节点的和是否等于给定的值,只要有一个符合就输出yes,否则输出no。


解题思路:题目给出的是前序遍历,所以可以用递归输入。(根(左孩子)(右孩子))大概是这样的输入。我参考了别人的写法,不用建树的。自己想的话估计会建树,当初也先过用递归,可能还不太会用所以没成功。


#include<iostream>
#include<string.h>
using namespace std;

int ans;
char ch;
int data;

int sum(int s, int &flag) {
	
	cin>>ch;    //输入左括号
	if(cin>>data != 0 ) {  //输入数据成功

		s += data;    
		int ok1 = sum(s, flag);  //左子树
		int ok2 = sum(s, flag);  //右子树
		if(!ok1 && !ok2 && !flag) //判断是否是叶子节点 并且还没有匹配成功过
			if(s == ans) 
				flag = 1;
		cin>>ch;   //输入右括号
		return 1;
	}
	else {

		cin.clear();  //清除错误状态
		cin>>ch;   //输入右括号
		return 0;
	}
}


int main() {

	while(cin>>ans != 0) {

		int flag = 0;
		sum(0, flag);
		if(flag == 1)
			cout<<"yes"<<endl;
		else
			cout<<"no"<<endl;
		
	}
	return  0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值