【解析】案例4-1.5 顺序存储的二叉树的最近公共祖先问题
立志用最少的代码做最高效的表达
设顺序存储的二叉树中有编号为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 顺序存储的二叉树的最近公共祖先问题相关推荐
- 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先
[LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...
- 二叉树:二叉树的最近公共祖先
二叉树的最近公共祖先 文章目录 一.题目描述 二.解题思路 三.代码解析 一.题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 ...
- LeetCode二叉树系列——236.二叉树的最近公共祖先
一.题目描述: 236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表 ...
- leetcode 236. 二叉树的最近公共祖先 递归解法 c语言
如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...
- 二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表
二叉树的最近公共祖先 思路 在左.右子树中分别查找是否包含p或q: 如果以下两种情况(左子树包含p,右子树包含q/左子树包含q,右子树包含p),那么此时的根节点就是最近公共祖先 如果左子树包含p和q, ...
- LeetCode 1676. 二叉树的最近公共祖先 IV
文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树的根节点 root 和 TreeNode 类对象的数组(列表) nodes,返回 nodes 中所有节点的最近公共祖先(LCA). 数组(列 ...
- 最近公共祖先_leetcode No.236 二叉树的最近公共祖先
承接二叉搜索树的最近公共祖先. 题目链接: 二叉树的最近公共祖先 - 力扣(LeetCode)leetcode-cn.com 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百 ...
- 【LeetCode】【HOT】236. 二叉树的最近公共祖先(递归)
[LeetCode][HOT]236. 二叉树的最近公共祖先 文章目录 [LeetCode][HOT]236. 二叉树的最近公共祖先 package hot;class TreeNode{int va ...
- 奇安信集团笔试题:二叉树的最近公共祖先(leetcode236),杀死进程(leetcode582)...
1. 二叉树最近公共祖先 奇安信集团 2020校招 服务端开发-应用开发方向在线考试 编程题|20分2/2 寻祖问宗 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C+ ...
最新文章
- js如何运行python代码_python中执行javascript代码
- jsp页面中静态文件的时间戳
- 记一些大型项目中所作的规划
- python 解码json数据并在一个OrderdDict中保留其顺序
- painticon java_新人,关于java的 paintIcon()方法
- C++反汇编代码分析
- 在Silverlight+WCF中应用以角色为基础的安全模式(一)基础篇之角色为基础的安全模式简介...
- [数据结构]树、森林与二叉树之间的相互转换方法
- 五岁的时候,你在干什么?
- php设计模式在框架中的应用,关于设计模式在实际场景中的应用
- 安卓中的布局属性详解
- server2008r2经常蓝屏或者自动重启
- PN结是什么?PN结有什么特征?PN结的应用
- 计算机主板运算放大器电路,常用运算放大器电路图 (全集)
- vue中使用v-for,出现警告 component lists rendered with v-for should have explicit keys
- matlab 坐标点标记符号表
- C++11新特性之long long类型
- HTML5期末大作业:餐饮网站设计——餐饮店铺(1页) web前端设计与开发期末作品/期末大作业
- 张近东的大商之道:企业价值在于“为别人所用” | 一点财经
- Oracle账号注册、下载、安装与卸载