力扣labuladong——一刷day47

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [一、力扣993. 二叉树的堂兄弟节点](#一、力扣993. 二叉树的堂兄弟节点)
  • [二、力扣1315. 祖父节点值为偶数的节点和](#二、力扣1315. 祖父节点值为偶数的节点和)
  • [三、力扣1448. 统计二叉树中好节点的数目](#三、力扣1448. 统计二叉树中好节点的数目)
  • [四、力扣1469. 寻找所有的独生节点](#四、力扣1469. 寻找所有的独生节点)

前言


二叉树的递归分为「遍历」和「分解问题」两种思维模式,这道题需要用到「遍历」的思维。

一、力扣993. 二叉树的堂兄弟节点

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int depthX = -1, depthY = -1;
    boolean flag = true;
    public boolean isCousins(TreeNode root, int x, int y) {
        fun(root,1,x,y);
        if(flag == false){
            return false;
        }
        if(depthX == depthY){
            return true;
        }
        return false;
    }
    public void fun(TreeNode root, int depth, int x, int y){
        if(root == null){
            return ;
        }
        if(root.val == x){
            depthX = depth;
        }
        if(root.val == y){
            depthY = depth;
        }
        if(root.left != null && root.right != null){
            if((root.left.val == x || root.left.val == y) && (root.right.val == x || root.right.val == y)){
                flag = false;
            }
        }
        fun(root.left,depth+1,x,y);
        fun(root.right,depth+1,x,y);
    }
}

二、力扣1315. 祖父节点值为偶数的节点和

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int sum = 0;
    public int sumEvenGrandparent(TreeNode root) {
        fun(root, null, null);
        return sum;
    }
    public void fun(TreeNode root, TreeNode parent, TreeNode grandParent){
        if(root == null){
            return;
        }
        if(grandParent != null && grandParent.val % 2 == 0){
            sum += root.val;
        }
        fun(root.left, root, parent);
        fun(root.right, root, parent);
    }
}

三、力扣1448. 统计二叉树中好节点的数目

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int count = 0;
    public int goodNodes(TreeNode root) {
        fun(root,Integer.MIN_VALUE);
        return count;
    }
    public void fun(TreeNode root, int preMax){
        if(root == null){
            return;
        }
        if(root.val >= preMax){
            preMax = root.val;
            count ++;
        }
        fun(root.left, preMax);
        fun(root.right, preMax);
    }
}

四、力扣1469. 寻找所有的独生节点

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    List<Integer> res = new ArrayList<>();
    public List<Integer> getLonelyNodes(TreeNode root) {
        fun(root);
        return res;
    }
    public void fun(TreeNode root){
        if(root == null){
            return;
        }
        if(root.left == null && root.right != null){
            res.add(root.right.val);
        }
        if(root.left != null && root.right == null){
            res.add(root.left.val);
        }
        fun(root.left);
        fun(root.right);
    }
}
相关推荐
好家伙VCC11 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
皮皮林55111 小时前
SpringBoot 全局/局部双模式 Gzip 压缩实战:14MB GeoJSON 秒变 3MB
java·spring boot
weixin_4569042711 小时前
Spring Boot 用户管理系统
java·spring boot·后端
趁你还年轻_11 小时前
异步编程CompletionService
java
DKPT12 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
sibylyue12 小时前
Guava中常用的工具类
java·guava
奔跑吧邓邓子12 小时前
【Java实战㉞】从0到1:Spring Boot Web开发与接口设计实战
java·spring boot·实战·web开发·接口设计
专注API从业者12 小时前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python
liulilittle12 小时前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
奔跑吧邓邓子12 小时前
【Java实战㉝】Spring Boot实战:从入门到自动配置的进阶之路
java·spring boot·实战·自动配置