博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1145 递归
阅读量:4960 次
发布时间:2019-06-12

本文共 1040 字,大约阅读时间需要 3 分钟。

#include
#include
#include
using namespace std;bool flag=false;int kk;char GetNext() //将没用的符号过滤掉{ char c; while(scanf("%c",&c) && (c==' ' || c=='\n' || c==9 || c==10)); return c;}int dfs(int sum,int hight){ int sign=1,k=0,k1,k2; char c; c=GetNext(); if(c==')') { return hight; } if(c=='-')//当为负数时 { sign=-sign; c=GetNext(); } while((c>='0' && c<='9'))//取数字 { k=k*10+(c-'0')*sign; scanf("%c",&c); } if(c=='\n' || c==' ') c=GetNext(); if(c=='(') k1=dfs(sum+k,hight+1); //返回左孩子高度 c=GetNext(); if(c=='(') k2=dfs(sum+k,hight+1);//返回右孩子高度 c=GetNext(); if(k2==hight+1 && k1==hight+1)//判断是否是叶子节点 { if(sum+k==kk) flag=true; } return 0;}int main(){ while(scanf("%d",&kk)!=EOF) { flag=false; GetNext(); dfs(0,0); //GetNext(); if(flag) printf("yes\n"); else printf("no\n"); } return 0;}

 

本题就是树的遍历,由于特殊的形式所以在实现上有点麻烦,主要注意两点情况:

(1)       数值可以为负

(2)       叶子节点的判断,当“叶子”(左、右)节点的高度等于“父节点”高度加一,则“父节点”才是真正的叶子节点 

转载于:https://www.cnblogs.com/yu-chao/archive/2012/01/01/2309646.html

你可能感兴趣的文章
九月四号
查看>>
asp.net web 简单使用cookie
查看>>
MySQL学习笔记:创建整年日期
查看>>
【iCore3 双核心板_FPGA】例程九:状态机实验——状态机使用
查看>>
静态类和非静态类的区别
查看>>
使用java.util.Properties类读写配置文件
查看>>
Log4J配置文件详解
查看>>
搭建一个基于CentOS的可视化zookeeper管理工具zkUI实现对zk的可视化管理
查看>>
es6学习整理(备忘)01
查看>>
JQuery IE8 找不到getContext属性,兼容性问题
查看>>
C# ASP.NET 页面之间传值传参中文乱码解决方法
查看>>
hdu 4714(树形dp)
查看>>
loj 1017(dp)
查看>>
练习1 程序设计
查看>>
关于C语言的书
查看>>
编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习3
查看>>
C#访问修饰符简单说明
查看>>
jQuery.mobile.activePage获取当点活动的page
查看>>
Redis_Jedis使用总结
查看>>
线段树补充
查看>>