首页 > 其他分享 >2024.2.8力扣每日一题——二叉树的堂兄弟节点

2024.2.8力扣每日一题——二叉树的堂兄弟节点

时间:2024-03-31 17:00:58浏览次数:22  
标签:node 2024.2 遍历 val int 力扣 二叉树 root 节点

2024.2.8

题目来源

力扣每日一题;题序:993

我的题解

方法一 层序遍历

使用层序遍历,先判断x或y是否是根节点,若是则x和y必然不可能是堂兄弟节点。每次遍历当前层时判断下一层是否出现x和y,若x和y分别出现在该节点的左右节点上,则x和y不是堂兄弟节点;若在下一层x和y没有同时出现,则x和y必然不可能是堂兄弟节点;其余情况x和y是堂兄弟节点

时间复杂度:O(n)。遍历整棵树的时间
空间复杂度:O(n)。使用的队列空间

public boolean isCousins(TreeNode root, int x, int y) {
     if(root.val==x||root.val==y)
        return false;
    Queue<TreeNode> queue=new LinkedList<>();
    queue.offer(root);
    while(!queue.isEmpty()){
        int sz=queue.size();
        //count记录x和y在下一层出现的次数
        int count=0;
        for(int i=0;i<sz;i++){
            TreeNode t=queue.poll();
            //f判断x和y是不是同一个父节点
            int f=0;
            if(t.left!=null){
                if(t.left.val==x||t.left.val==y){
                    count++;
                    f++;
                }
                queue.offer(t.left);
            }
            if(t.right!=null){
                if(t.right.val==x||t.right.val==y) {
                    count++;
                    f++;
                }
                queue.offer(t.right);
            }
            if(f==2)
                return false;
        }
        //下一层只有x或者y
        if(count==1){
            return false;
        }
        if(count==2)
            break;
    }
    return true;
}
方法二 深度优先遍历

从根节点开始,对树进行一次遍历,在遍历的过程中维护「深度」以及「父节点」这两个信息。当遍历到 x 或 y 节点时,就将信息记录下来;当这两个节点都遍历完成了以后,就可以退出遍历的过程,判断它们是否为堂兄弟节点了。实际就是在遍历过程中记录每个节点的深度、父节点

时间复杂度:O(n)。遍历整棵树的时间
空间复杂度:O(n)。使用的队列空间

TreeNode xParent;
int xDeepth;
TreeNode yParent;
int yDeepth;
public boolean isCousins(TreeNode root, int x, int y) {
    if(root.val==x||root.val==y)
        return false;
    dfs(0,root,x,y,null);
    return xDeepth==yDeepth&&xParent!=yParent;
}
public void dfs(int deepth,TreeNode node,int x,int y,TreeNode parent){
    if(node==null){
        return ;
    }
    if(node.val==x){
        xParent=parent;
        xDeepth=deepth;
    }else if(node.val==y){
        yParent=parent;
        yDeepth=deepth;
    }
    dfs(deepth+1,node.left,x,y,node);
    dfs(deepth+1,node.right,x,y,node);
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈

标签:node,2024.2,遍历,val,int,力扣,二叉树,root,节点
From: https://blog.csdn.net/weixin_42075274/article/details/137201990

相关文章

  • 【每周例题】力扣 C++ 二叉树的最小深度
    二叉树的最小深度题目二叉树的最小深度题目分析1.首先我们可以处理最小深度为0与最小深度为1的情况:最小深度为0:头结点为空;root==nullptr最小深度为1:root->left==nullptr&&root->right==nullptr2.接下来分为左右子树处理,我们可以用递归来计算最小深度3.最后比较左......
  • 【每周例题】力扣 C++ 搜索插入位置
    搜索插入位置题目搜索插入位置 题目分析1.第一个想法肯定是暴力遍历,找到了就输出下标,找不到就对比前后两个数字,寻找合适的位置插入。2.需要注意一点,我们需要再一开始就对比target与数组最后一个数的大小,如果比数组最后一个数大,直接返回数组长度3.第二个想法就是缩短寻找的......
  • LeetCodeHot100 二叉树 94. 二叉树的中序遍历 104. 二叉树的最大深度 101. 对称二
    94.二叉树的中序遍历https://leetcode.cn/problems/binary-tree-inorder-traversal/description/?envType=study-plan-v2&envId=top-100-liked//递归//List<Integer>resList;//publicList<Integer>inorderTraversal(TreeNoderoot){//re......
  • 力扣HOT100热题宝典--第4节
    ......
  • L2-011 玩转二叉树
    和L2-006是一样的。正常建树,只是在BFS的时候先放右儿子。L2-006树的遍历https://www.cnblogs.com/chengyiyuki/p/18106375代码:#include<bits/stdc++.h>usingnamespacestd;constintN=40;intpre[N],in[N];intL[N],R[N];intbuild(intal,intar,intbl,int......
  • 力扣回溯算法--总结篇
    前言期末考试加上寒假两个月,一直没有动力,差不多三个月没写题了。最近写题也没有及时写文章总结,实在不知道如何开始,但是也得开始啊。干脆写个总结吧,再开始每天坚持写题写文章。玩了两个月,很多事情没有完成,很多东西也忘得差不多了,得抓紧时间捡起来,坚持输入,坚持输出。内容这些......
  • 算法学习——LeetCode力扣动态规划篇1
    算法学习——LeetCode力扣动态规划篇1509.斐波那契数509.斐波那契数-力扣(LeetCode)描述斐波那契数(通常用F(n)表示)形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2......
  • Offer必备算法18_栈_五道力扣题详解(由易到难)
    目录①力扣1047.删除字符串中的所有相邻重复项解析代码②力扣844.比较含退格的字符串解析代码③力扣227.基本计算器II解析代码④力扣394.字符串解码解析代码⑤力扣946.验证栈序列解析代码本篇完。①力扣1047.删除字符串中的所有相邻重复项1047.删除字符......
  • 【力扣hot100】160.相交链表
    相交链表给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点c1开始相交:题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。示例1:输......
  • 力扣刷题 45.跳跃游戏 II
    目录题干解题思路题干给定一个长度为 n 的 0索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i+j] 处:0<=j<=nums[i] i+j<n返回到达 nums[......