博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT (Advanced Level) 1115. Counting Nodes in a BST (30)
阅读量:6786 次
发布时间:2019-06-26

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

简单题。统计一下即可。

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int maxn=100000+10;struct Node{ int left; int right; int val; int dep;} s[maxn];int n;int a[maxn];int max_dep,n1,n2;void dfs(int x,int dep){ max_dep=max(max_dep,dep); s[x].dep=dep; if(s[x].left!=-1) dfs(s[x].left,dep+1); if(s[x].right!=-1) dfs(s[x].right,dep+1);}void DFS(int x){ if(s[x].dep==max_dep) n1++; else if(s[x].dep==max_dep-1) n2++; if(s[x].left!=-1) DFS(s[x].left); if(s[x].right!=-1) DFS(s[x].right);}int main(){ scanf("%d",&n); if(n==0) printf("0 + 0 = 0\n"); else { for(int i=1; i<=n; i++) scanf("%d",&a[i]); for(int i=0; i<=n; i++) s[i].left=s[i].right=-1; int id=0; s[id++].val=a[1]; for(int i=2; i<=n; i++) { int now=0; while(1) { if(a[i]<=s[now].val) { if(s[now].left!=-1) now=s[now].left; else { s[now].left=id; s[id++].val=a[i]; break; } } else { if(s[now].right!=-1) now=s[now].right; else { s[now].right=id; s[id++].val=a[i]; break; } } } } max_dep=n1=n2=0; dfs(0,1); DFS(0); printf("%d + %d = %d\n",n1,n2,n1+n2); } return 0;}

 

转载于:https://www.cnblogs.com/zufezzt/p/5645234.html

你可能感兴趣的文章
博客转移声明
查看>>
利用论坛营销推广的完美“6步曲”
查看>>
不是所有的视频外链都是高质量的
查看>>
依赖和关联的区别
查看>>
DELL服务器硬件错误检查
查看>>
JD模拟用户登录(保持session)
查看>>
iOS之简单瀑布流的实现
查看>>
rsync + lsyncd 数据同步
查看>>
sublimeText3 设置格式化代码快捷键
查看>>
mysql 事务
查看>>
PHP语法
查看>>
电脑网络布线中会遇到的十大陷阱
查看>>
XGBOOST原理解析
查看>>
前端传递json数据给后台
查看>>
什么样的Web开发框架才是好的前端框架
查看>>
【git命令】git-rebase
查看>>
Java定时任务调度工具Timer
查看>>
混淆js问题
查看>>
vim编辑模式,命令模式
查看>>
Linux日常运维管理技巧-w命令、vmstat 命令、top 命令、sar 命令、nload命令
查看>>