当前位置: 首页 > news >正文

三杰网站建设/合肥头条今日头条新闻最新消息

三杰网站建设,合肥头条今日头条新闻最新消息,网吧服务员,广东建设集团有限公司官网【题意】 略 【解法】 暴力剪枝 说实话一拿到题目最开始的想法是中序和中序对称、前序和后序对称,然而最后上手去写以后发现这编程复杂度高到一定境界,还是暴力拯救世界的好 首先,怎么判定一棵子树是不是对称二叉树 1 bool check(ll x,ll y) …

【题意】

【解法】

暴力+剪枝

说实话一拿到题目最开始的想法是中序和中序对称、前序和后序对称,然而最后上手去写以后发现这编程复杂度高到一定境界,还是暴力拯救世界的好

首先,怎么判定一棵子树是不是对称二叉树

1 bool check(ll x,ll y)
2 {
3     if (x==-1&&y==-1) return true;  // 皆为空
4      if (x==-1||y==-1) return false; // 一边不为空 
5     if (a[x]!=a[y]) return false;   // 数值不相等
6     return ((check(l[x],r[y])&&check(r[x],l[y])));
7 }

如果待判定的子树的根节点为x,则只需要check(l[x],r[x])即可

然而对每个节点都判断,很显然是时间上是来不及的

需要剪枝

什么情况下完全不可能有对称二叉树

1、两棵子树节点数不同

2、两棵子树高度不同

3、两棵子树权值和/最大值/最小值不同

 1 void dfs(ll rt,ll&h,ll&sz,ll&sum)
 2 {      // 节点,高度,节点数,权值和
 3     if (rt<=0)
 4     {
 5         h=0,sz=0,sum=0;
 6         return;
 7     }
 8     ll h1,h2,sz1,sz2,sm1,sm2;
 9     dfs(l[rt],h1,sz1,sm1);
10     dfs(r[rt],h2,sz2,sm2);
11     if (h1==h2&&sz1==sz2&&sm1==sm2)
12         if (check(l[rt],r[rt]))
13             ans=max(ans,sz1+sz2+1);
14     h=max(h1,h2)+1; 
15     sz=sz1+sz2+1;
16     sum=sm1+sm2+a[rt];
17 }

实际上,只需要判断高度+节点数就行

【代码】

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 1000000+5;
 4 typedef long long ll;
 5 ll n;
 6 ll l[N]={0},r[N]={0};
 7 ll a[N];
 8 ll ans;
 9 bool check(ll x,ll y)
10 {
11     if (x==0&&y==0) return true;  // 皆为空 
12     if (a[x]!=a[y]) return false;
13     return ((check(l[x],r[y])&&check(r[x],l[y])));
14 }
15 void dfs(ll rt,ll&h,ll&sz)
16 {
17     if (rt<=0)
18     {
19         h=0,sz=0;
20         return;
21     }
22     ll h1,h2,sz1,sz2;
23     dfs(l[rt],h1,sz1);
24     dfs(r[rt],h2,sz2);
25     if (h1==h2&&sz1==sz2)
26         if (check(l[rt],r[rt]))
27             ans=max(ans,sz1+sz2+1);
28     h=max(h1,h2)+1; 
29     sz=sz1+sz2+1; 
30 }
31 int main()
32 {
33     scanf("%lld",&n);
34     for (int i=1;i<=n;i++)
35         scanf("%lld",&a[i]);
36     for (int i=1;i<=n;i++)
37     {
38         scanf("%lld%lld",&l[i],&r[i]);
39         if (l[i]==-1) l[i]++;
40         if (r[i]==-1) r[i]++;
41     }
42     a[0]=-1;
43     ans=1;
44     ll h,sz;
45     dfs(1,h,sz);
46     printf("%lld",ans);
47 }

 

转载于:https://www.cnblogs.com/klarkxy/p/10017470.html

http://www.lbrq.cn/news/1595647.html

相关文章:

  • 福州做网站的公司电话/学历提升
  • 微信营销和网站建设/关于校园推广的软文
  • 做电子外贸网站建设/网站排名优化培训电话
  • 库尔勒北京网站建设/网络营销产品推广方案
  • 吉林一站式网站建设介绍/肇庆seo外包公司
  • b2b网站解决方案/百度付费问答平台
  • 网站怎么可以做视频播放/南昌企业网站建设
  • 网站开发开题报告计划进度安排/聚名网
  • 子网站如何做/深圳推广平台深圳网络推广
  • 网站开发招聘名称/爱站网seo综合查询工具
  • 网站建设服务商/谷歌seo是指什么意思
  • 一个公司做多个网站是好还是坏/免费私人网站建设软件
  • 个人网站需求分析/搜狗网页搜索
  • 交友网站app推广/网络营销的含义
  • 天门网站/网站页面优化方案
  • 网站根目录 设置/上海已经开始二次感染了
  • 移动端网站模板怎么做的/贵州seo和网络推广
  • win7 iis 网站/seo流量排名软件
  • 坪地网站建设哪家好/如何百度推广
  • 网站设计报价单/营销推广活动策划书模板
  • 怎么做平台网站/百度一下你就知道123
  • 怎么修改wordpress主题字体大小/aso关键字优化
  • 广东省白云区邮政编码/郑州seo关键词优化公司
  • 酒店网站建设公司/2021网络营销成功案例
  • 做响应式网站的公司/刷外链
  • 苏州专业网站制作方案/网络营销师培训
  • 网站开发 技术支持服务协议/企业如何进行网络推广
  • 网站制作的公司哪家效果好/站长工具推荐网站
  • 凡科网站模板/福州百度快照优化
  • 中国变装网站教你如何做女人/高端企业网站模板
  • deepseek、GPT与claude在MATLAB编程上的准确性对比——以卡尔曼滤波调试为例
  • C++高频知识点(十四)
  • 第二十四天(数据结构:栈和队列)队列实践请看下一篇
  • Linux文件权限管理与ACL配置指南
  • Android的UI View是如何最终绘制成一帧显示在手机屏幕上?
  • node.js常用函数