目录

7-4 小字辈

7-5 列出叶结点

7-6 顺序存储的二叉树的最近的公共祖先问题

总结:


7-4 小字辈

原题链接:题目详情 - 7-4 小字辈 (pintia.cn)

思路:

利用一维数组下标将树之间串联起来(类似于并查集的合并操作,实质上则不同)

代码:

#include<bits/stdc++.h>
using namespace std;const int N=1e5+10;
int fa[N],gen[N];
int n;
int max1;
priority_queue<int,vector<int>,greater<int> >res;int find(int x){if(fa[x]==-1)gen[x]=1;if(gen[x]==0)gen[x]=find(fa[x])+1;return gen[x];
}int main(){cin>>n;for(int i=1;i<=n;i++){cin>>fa[i];}for(int i=1;i<=n;i++){//find(i);max1=max(max1,find(i));}for(int i=1;i<=n;i++){if(gen[i]==max1)res.push(i);}//sort(res.begin(),res.end());cout<<max1<<endl;while(!res.empty()){if(res.size()!=1)cout<<res.top()<<' ';elsecout<<res.top();res.pop();}
}

(题目没有分左右子树,即认为重建起来是树而非二叉树)

7-5 列出叶结点

原题链接:题目详情 - 7-5 列出叶结点 (pintia.cn)

思路:

依据题意重建二叉树即可,然后记录叶子结点的位置排序即可

代码:

#include<bits/stdc++.h>
using namespace std;const int N=15;
int n;
bool vis[N];
int root=-1;
int cnt;struct Binode{int elem;int lchild,rchild;int h,loc;
}e[N];void dfs(int x,int u){e[x].h=u;e[x].loc=cnt++;if(e[x].lchild!=-1)dfs(e[x].lchild,u+1);if(e[x].rchild!=-1)dfs(e[x].rchild,u+1);
}bool cmp(Binode x,Binode y){if(x.h!=y.h)return x.h<y.h;elsereturn x.loc<y.loc;
}int main(){cin>>n;for(int i=0;i<n;i++){char a,b;cin>>a>>b;e[i].elem=i;if(a!='-'){e[i].lchild=a-'0';vis[a-'0']=true;}else{e[i].lchild=-1;}if(b!='-'){e[i].rchild=b-'0';vis[b-'0']=true;}else{e[i].rchild=-1;}}for(int i=0;i<n;i++){if(!vis[i])root=i;}dfs(root,1);sort(e,e+n,cmp);for(int i=0;i<n;i++){if(e[i].lchild==-1&&e[i].rchild==-1){cout<<e[i].elem;if(i!=n-1)cout<<' ';}}
}

(有明确的的左右子树,即创建结构体,重建二叉树即可)

7-6 顺序存储的二叉树的最近的公共祖先问题

原题链接:

题目详情 - 7-6 顺序存储的二叉树的最近的公共祖先问题 (pintia.cn)

思路:

首先明确子树与祖先的位置关系,即祖先等于子树位置除以2

代码:

#include<bits/stdc++.h>
using namespace std;const int N=1e3+10;
int n;
int len[N];int fun(int a,int b){if(a==b)return a;if(a>b)return fun(a/2,b);if(a<b)return fun(a,b/2);
}int main(){cin>>n;for(int i=1;i<=n;i++)cin>>len[i];int a,b;cin>>a>>b;if(len[a]==0)cout<<"ERROR: T["<<a<<"] is NULL";else if(len[b]==0)cout<<"ERROR: T["<<b<<"] is NULL";else{int c=fun(a,b);cout<<c<<' '<<len[c];}
}

总结:

对于树的问题而言,解决问题的首要问题是对于树的重建

重建而言,你可以选择用数组下标与值串联起来的方式,即类似于并查集合并的方式

也可以选择用结构体指针的方式重建,相对而言没有纯数组实现的方式运算速度快

7-4 (小字辈) 7-5 (列出叶结点) 7-6 (顺序存储的二叉树的最近的公共祖先问题)相关推荐

  1. 7-7 列出叶结点 (10 分)

    7-7 列出叶结点 (10 分) 对于给定的二叉树,本题要求你按从上到下.从左到右的顺序输出其所有叶节点. 输入格式: 首先第一行给出一个正整数 N(≤10),为树中结点总数.树中的结点从 0 到 N ...

  2. 【两种解法】基础实验4-2.2 列出叶结点 (25 分)

    立志用最少的代码做最高效的表达 对于给定的二叉树,本题要求你按从上到下.从左到右的顺序输出其所有叶节点. 输入格式: 首先第一行给出一个正整数 N(≤10),为树中结点总数.树中的结点从 0 到 N− ...

  3. 列出叶结点(PTA)

    对于给定的二叉树,本题要求你按从上到下.从左到右的顺序输出其所有叶节点. 输入格式: 首先第一行给出一个正整数 N(≤10),为树中结点总数.树中的结点从 0 到 N−1 编号.随后 N 行,每行给出 ...

  4. 列出叶节点 python

    7-10 列出叶结点 (10 分) 对于给定的二叉树,本题要求你按从上到下.从左到右的顺序输出其所有叶节点. 输入格式: 首先第一行给出一个正整数 N(≤10),为树中结点总数.树中的结点从 0 到 ...

  5. 有一个1亿结点的树,已知两个结点, 求它们的最低公共祖先!

    对该问题,分为如下几种情形讨论: 情形一: 假如该树为二叉树,并且是二叉搜索树, 依据二叉搜索树是排过序的, 我们只需要从树的根结点开始,逐级往下,和两个输入的结点进行比较. 如果当前结点的值比两个结 ...

  6. 二叉树如何求两个叶节点的最近公共祖先--re

    二叉搜索树原理: 二叉搜索树是排序过的 ,位于左子树的结点都比父结点小,位于右子树的结点都比父结点大,我们只需从根节点开始和两个输入的结点进行比较,如果当前节点的值比两个结点的值都大,那么最低的公共祖 ...

  7. 在一颗度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶结点个数是( )

    在一颗度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶结点个数是( ) A. 41 B. 82 C. 113 D. 122 设树中度为i(i ...

  8. LeetCode 988. 从叶结点开始的最小字符串(DFS)

    文章目录 1. 题目 2. 解题 1. 题目 给定一颗根结点为 root 的二叉树,树中的每一个结点都有一个从 0 到 25 的值,分别代表字母 'a' 到 'z':值 0 代表 'a',值 1 代表 ...

  9. 6-8 先序输出叶结点 (15 分)

    ** 6-8 先序输出叶结点 (15 分) ** 本题要求按照先序遍历的顺序输出给定二叉树的叶结点. 函数接口定义: void PreorderPrintLeaves( BinTree BT ); 其 ...

最新文章

  1. web签名验证程序【跨服务器、中文字符签名方法】-php为例
  2. (三)Window的特色学习笔记
  3. 【错误记录】集成 Tinker 热修复报错 ( No such property: variantConfiguration for class: .ApplicationVariantData )
  4. android442电视怎么投屏,哔哩哔哩怎么投屏电视? b站投屏的方法
  5. eclipse常用快捷键汇总
  6. kustomize+argo
  7. .net 面试题系列文章二(附答案)
  8. matlab都有什么接口,介绍MATLAB与C++的几种接口方式
  9. java作为kafka生产者实验及Expiring超时问题解决
  10. php utc时间_PHP转换UNIX时间戳 UTC时间(TZ格式) 标准时间的方法 UNIX UTC GMT时间、本地时间互转...
  11. ImageMagick 拆分透明PNG 合并JPG和Alpha Mask
  12. php粉层,thinkphp 模型分层
  13. 处理9path图片边缘的小黑点
  14. beyond compare软件安装与破解
  15. Derivation of Linear Regression with One Variable
  16. 程序员的岗位路线规划,不止是编程?
  17. POSIX是什么,为什么需要POSIX
  18. C++小实验之vector的 push_back 和 emplace_back 及其使用时机
  19. EPIC 审批流程设置 BAdI:示例
  20. 3000通电话培养出一个性格分析专家,阿里“柔军”是这样养成的

热门文章

  1. 抓贼呀,偷自行车的贼!
  2. 第8章:下半部和推后执行的工作
  3. 虚拟机VMware Workstation安装与使用的一点总结,VMwarews6.0.2完美中文绿色精简版下载...
  4. 【大禹电子】超声波液位计应用在三都岛海水养殖流量监测
  5. 【21考研】合肥工业大学计算机经验分享集锦
  6. 收集到的几篇看雪学院文章
  7. 提取INRIA数据集的box
  8. 计算机软考网络中级题目,计算机软考中级软考网络工程师上午试题答题技巧
  9. SpringCache缓存处理
  10. ubuntu18.04彻底卸载fcitx