立志用最少的代码做最高效的表达


设顺序存储的二叉树中有编号为ii和jj的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。

输入格式:

输入第1行给出正整数nn(\le 1000≤1000),即顺序存储的最大容量;第2行给出nn个非负整数,其间以空格分隔。其中0代表二叉树中的空结点(如果第1个结点为0,则代表一棵空树);第3行给出一对结点编号ii和jj。

题目保证输入正确对应一棵二叉树,且1\le i,j \le n1≤i,j≤n。

输出格式:

如果ii或jj对应的是空结点,则输出ERROR: T[x] is NULL,其中x是ii或jj中先发现错误的那个编号;否则在一行中输出编号为ii和jj的两个结点最近的公共祖先结点的编号和值,其间以1个空格分隔。

输入样例1:
15
4 3 5 1 10 0 7 0 2 0 9 0 0 6 8
11 4
输出样例1:
2 3

输入样例2:
15
4 3 5 1 0 0 7 0 2 0 9 0 0 6 8
12 8
输出样例2:
ERROR: T[12] is NULL


逻辑分析:
1、如果为空树或任一查询的节点为空,返回ERROR
2、两个节点交替向上查询,一旦相等,则为最近公共祖先节点,输出即可。

#include<iostream>
#include<cstdio>
using namespace std;int a[1010]; int main() {int n; cin >> n; for(int i = 1; i <= n; i++) {cin >> a[i];}int x, y; cin >> x >> y;if((a[x]==0 || a[y]==0) || a[1]==0) {printf("ERROR: T[%d] is NULL\n", x);} else {int ma = max(x, y), mi = min(x, y);while(ma > mi) ma /= 2;while(ma != mi) {if(ma > mi) ma /= 2;if(ma < mi) mi /= 2;}cout << ma << ' ' << a[ma] << '\n';}return 0;
}

      ——生活需要想象力,不在于能与不能,而在于想与不想。生活态度决定了技术高度。

【解析】案例4-1.5 顺序存储的二叉树的最近公共祖先问题相关推荐

  1. 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先

    [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...

  2. 二叉树:二叉树的最近公共祖先

    二叉树的最近公共祖先 文章目录 一.题目描述 二.解题思路 三.代码解析 一.题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 ...

  3. LeetCode二叉树系列——236.二叉树的最近公共祖先

    一.题目描述: 236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表 ...

  4. leetcode 236. 二叉树的最近公共祖先 递归解法 c语言

    如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...

  5. 二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表

    二叉树的最近公共祖先 思路 在左.右子树中分别查找是否包含p或q: 如果以下两种情况(左子树包含p,右子树包含q/左子树包含q,右子树包含p),那么此时的根节点就是最近公共祖先 如果左子树包含p和q, ...

  6. LeetCode 1676. 二叉树的最近公共祖先 IV

    文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树的根节点 root 和 TreeNode 类对象的数组(列表) nodes,返回 nodes 中所有节点的最近公共祖先(LCA). 数组(列 ...

  7. 最近公共祖先_leetcode No.236 二叉树的最近公共祖先

    承接二叉搜索树的最近公共祖先. 题目链接: 二叉树的最近公共祖先 - 力扣(LeetCode)​leetcode-cn.com 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百 ...

  8. 【LeetCode】【HOT】236. 二叉树的最近公共祖先(递归)

    [LeetCode][HOT]236. 二叉树的最近公共祖先 文章目录 [LeetCode][HOT]236. 二叉树的最近公共祖先 package hot;class TreeNode{int va ...

  9. 奇安信集团笔试题:二叉树的最近公共祖先(leetcode236),杀死进程(leetcode582)...

    1. 二叉树最近公共祖先 奇安信集团 2020校招 服务端开发-应用开发方向在线考试 编程题|20分2/2 寻祖问宗 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C+ ...

最新文章

  1. js如何运行python代码_python中执行javascript代码
  2. jsp页面中静态文件的时间戳
  3. 记一些大型项目中所作的规划
  4. python 解码json数据并在一个OrderdDict中保留其顺序
  5. painticon java_新人,关于java的 paintIcon()方法
  6. C++反汇编代码分析
  7. 在Silverlight+WCF中应用以角色为基础的安全模式(一)基础篇之角色为基础的安全模式简介...
  8. [数据结构]树、森林与二叉树之间的相互转换方法
  9. 五岁的时候,你在干什么?
  10. php设计模式在框架中的应用,关于设计模式在实际场景中的应用
  11. 安卓中的布局属性详解
  12. server2008r2经常蓝屏或者自动重启
  13. PN结是什么?PN结有什么特征?PN结的应用
  14. 计算机主板运算放大器电路,常用运算放大器电路图 (全集)
  15. vue中使用v-for,出现警告 component lists rendered with v-for should have explicit keys
  16. matlab 坐标点标记符号表
  17. C++11新特性之long long类型
  18. HTML5期末大作业:餐饮网站设计——餐饮店铺(1页) web前端设计与开发期末作品/期末大作业
  19. 张近东的大商之道:企业价值在于“为别人所用” | 一点财经
  20. Oracle账号注册、下载、安装与卸载

热门文章

  1. 腾讯2020校园招聘---假期
  2. 杜比收购低延迟流媒体平台Millicast
  3. 用Elevator优化AV1视频播放
  4. 内容自适应编码中的不同粒度
  5. 万字长文助你上手软件领域驱动设计 DDD
  6. [ffmpeg] 解码API
  7. Nginx入门之两种handler函数的挂载方式
  8. RTMP在NGINX的启动
  9. FLV封装格式介绍及解析
  10. idea没有git选项