首页 > 其他分享 >AcWing 3555. 二叉树

AcWing 3555. 二叉树

时间:2023-03-26 20:35:12浏览次数:57  
标签:3555 const int res LL -- 二叉树 节点 AcWing

https://www.acwing.com/problem/content/description/3558/

输入样例:
1
8 4
2 3
4 5
6 -1
-1 -1
-1 7
-1 -1
8 -1
-1 -1
1 6
4 6
4 5
8 1
输出样例:
2
4
2
4

详解见代码内部

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18,MINN=-MAXN,INF=0x3f3f3f3f;
const LL N=2e6+10,M=2023;
const LL mod=998244353;
const double PI=3.1415926535;
#define endl '\n'
int n,m;
int father[N],L[N],R[N];
int find(int x,int a[])//从x这个点开始往上搜索父节点,并且存储在相应的数组中
{
    int res=0;//下标从0开始
    while(x!=1)//没有到达根节点
    {
        a[res++]=x;//离得更近的父节点装进去(注意自己也装进去了)
        x=father[x];//找父节点的父节点,依次往上递增寻找
    }
    a[res++]=1;//最后把根节点装进去
    return res;//返回这一条路的父节点们
}
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    int T=1;
    cin>>T;
    while(T--)
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            LL x,y;
            cin>>x>>y;
            //有子节点,则记录
            if(x!=-1) father[x]=i;
            if(y!=-1) father[y]=i;
        }
        while(m--)
        {
            LL l,r;
            cin>>l>>r;
            //sum表示父节点的个数
            LL suml=find(l,L);//L储存所有l父节点的信息
            LL sumr=find(r,R);//R储存所有r父节点的信息
            //下标是从0开始的,所以倒过来-1
            //这里是从头开始往更深的地方寻找
            for(int i=suml-1,j=sumr-1;i>=0&&j>=0;i--,j--)
            {
                if(L[i]==R[j])//这里还一样的话,说明还可以在向下探索一下
                {
                    //此处有标记
                    suml--;
                    sumr--;
                }
                else break;//这里已经不一样了,直接退出
            }
            cout<<suml+sumr<<endl;
        }
    }
    return 0;
}

标签:3555,const,int,res,LL,--,二叉树,节点,AcWing
From: https://www.cnblogs.com/Vivian-0918/p/17259406.html

相关文章

  • 二叉树
    遍历顺序前序:中左右(中在前面就是前序)中序:左中右(中在中间就是中序)后序:左右中(中在前面就是后序)二叉树的非递归遍历https://www.bilibili.com/video/BV15f4y1W7i2前序(非递归)使......
  • LeetCode199.二叉树的右视图
    1.题目:给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]来源:力......
  • AcWing 第 96 场周赛 T3-4878. 维护数组
    https://www.acwing.com/problem/content/4881/输入样例1:52218112153121221421322123输出样例1:364输入样例2:5410161151551......
  • 力扣---剑指 Offer 32 - III. 从上到下打印二叉树 III
    请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树:......
  • 平衡二叉树 -(avltree)
    AVL树简介AVL树的名字来源于发明作者G.M.Adelson-Velsky和E.M. Landis的缩写。AVL树是最先发明的自平衡二叉查找树(Self-BalancingBinarySearchTree,简称平衡二叉树......
  • LeetCode. 102二叉树的层序遍历
    1.题目:给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]来源:力扣(L......
  • AcWing 874. 筛法求欧拉函数
    \(AcWing\)\(874.\)筛法求欧拉函数一、题目描述给定一个正整数\(n\),求\(1∼n\)中每个数的欧拉函数之和。输入格式共一行,包含一个整数\(n\)。输出格式共一行,包......
  • 每日一题-leetcode 单值二叉树
    如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回false。示例1:输入:[1,1,1,1,1,null,1]输出:true示例2:输......
  • 力扣---剑指 Offer 32 - II. 从上到下打印二叉树 II
    从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树:[3,9,20,null,null,15,7],   3  /\ 9 20   / \  15 ......
  • 力扣---剑指 Offer 32 - I. 从上到下打印二叉树
    从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树:[3,9,20,null,null,15,7],   3  /\ 9 20   / \  15  7返......