首页 > 其他分享 >1110 完全二叉树

1110 完全二叉树

时间:2023-04-21 20:34:47浏览次数:38  
标签:结点 dfs vis int 样例 完全 1110 二叉树

给定一个树,请你判断它是否是完全二叉树。

输入格式

第一行包含整数 N,表示树的结点个数。

树的结点编号为 0∼N−1。

接下来 N 行,每行对应一个结点,并给出该结点的左右子结点的编号,如果某个子结点不存在,则用 - 代替。

输出格式

如果是完全二叉树,则输出 YES 以及最后一个结点的编号。

如果不是,则输出 NO 以及根结点的编号。

数据范围

1≤N≤20

输入样例1:

9
7 8
- -
- -
- -
0 1
2 3
4 5
- -
- -

输出样例1:

YES 8

输入样例2:

8
- -
4 5
0 6
- -
2 3
- 7
- -
- -

输出样例2:

NO 1

实现代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=25;
int l[N],r[N],vis[N],max_n,lastx;
void dfs(int x,int k){
    if(k>max_n){
        max_n=k;
        lastx=x;
    }
    if(l[x]!=-1)dfs(l[x],k*2);
    if(r[x]!=-1)dfs(r[x],k*2+1);
}
int main(){
    int n;
    cin>>n;
    memset(l,-1,sizeof l);
    memset(r,-1,sizeof r);
    for(int i=0;i<n;i++){
        string a,b;
        cin>>a>>b;
        if(a!="-")l[i]=stoi(a),vis[l[i]]=1;
        if(b!="-")r[i]=stoi(b),vis[r[i]]=1;
    }
    int root=0;
    for(int i=0;i<n;i++){
        if(!vis[i]){
            root=i;
            break;
        }
    }
    dfs(root,1);
    if(max_n>n)cout<<"NO "<<root<<endl;
    else cout<<"YES "<<lastx<<endl;
    return 0;
}

 

标签:结点,dfs,vis,int,样例,完全,1110,二叉树
From: https://www.cnblogs.com/hxss/p/17341701.html

相关文章

  • 1102 反转二叉树
    以下是来自 MaxHowell@twitter 的内容:谷歌:我们的百分之九十的工程师都使用你编写的软件,但是你连在白板上反转二叉树都做不到,还是滚吧。现在,请你证明你会反转二叉树。输入格式第一行包含一个整数 N,表示树的结点数量。所有结点编号从 0 到 N−1。接下来 N 行,每行对......
  • 数据结构 ---> 二叉树 -->堆之解析_01
    老友们好!本期将对堆之构建进行解说!相信,初学此章节的老友!!或多或少,对前一期的部分代码,有所困惑!说真的,堆的有些内容理解起来还是挺困难的!好了,废话不多讲!开始本期的解析之旅吧!希望大家都能有所收获!!下面,先看一组,上一期的图示:>那么该如何操作,才能取得前几名的数值呢?针对这点,部分老友......
  • SDUTOJ 2128 树结构练习——排序二叉树的中序遍历
    树结构练习——排序二叉树的中序遍历TimeLimit:1000MSMemorylimit:65536K题目描述在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值(2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值(3).任意一个节......
  • 全二叉树
    全二叉树(CompleteBinaryTree)是一种特殊的二叉树,它的所有叶子节点都在同一层上,而且除了最后一层之外,其它层的节点数都达到了最大值,最后一层的节点从左到右依次排列。具有n个节点的完全二叉树,其节点编号从1到n,按照从上到下、从左到右的顺序进行编号,则有以下性质:如果一个节点的......
  • xShell终端中文乱码完全解决方法
    转至:https://www.shuzhiduo.com/A/gVdnq0y85W/xShell(xShell5)以及其他终端中文乱码的原因无非有三种:(1)Linux系统的编码问题;(2)xShell终端的编码问题; (3)两端的语言编码不一致;1.Linux系统的编码问题(1)执行locale命令查看系统语言;(2)设置系统环境变量LANG为e......
  • 浅谈全局平衡二叉树
    首先,这个是GBT,不是GPT。其次,那个是ChatGPT,不是ChatGBT。原理我们先考虑一个经典的问题:单点修树上最大权独立集问题,也就是LuoguP4719【模板】"动态DP"&动态树分治。使用树剖维护矩阵可以做到\(O(n\log^2n)\)的复杂度,可以通过\(10^5\)的数据。那我们能不能把这个问题优化......
  • LeetCode Top100: 翻转二叉树(python)
    给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[] 提示:树中节点数目范围在 [0,100] 内-100<=Node.val<=100实......
  • LeetCode Top 100: 二叉树的直径 (python)
     给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例:给定二叉树1/\23/\45返回 3,它的长度是路径[4,2,1,3]......
  • 4月18日leetcode二叉树几种遍历方式的非递归和递归
    给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例1:二叉树的前序中序和后序遍历算法是学习二叉树必不可少的,若是使用c语言遍历前中后序还是比较繁琐的,因为要考虑遍历结果存放的序列大小问题,想要解决这个问题就得想用递归计算二叉树的节点数量,再调用递归子函数完......
  • 23-4-18--二叉树--完全二叉树的层序遍历
    一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。输入格式:......