力扣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);
    }
}
相关推荐
bobogift3 分钟前
【玩转全栈】----Django基本配置和介绍
java·后端
岁月玲珑7 分钟前
ComfyUI如何配置启动跳转地址127.0.0.1但是监听地址是0.0.0.0,::
java·服务器·前端
007php00715 分钟前
某游戏互联网大厂Java面试深度解析:Java基础与性能优化(一)
java·数据库·面试·职场和发展·性能优化·golang·php
qianbailiulimeng30 分钟前
2019阿里java面试题(一)
java·后端
zz07232032 分钟前
数据结构 —— 栈
数据结构
关于不上作者榜就原神启动那件事35 分钟前
模拟算法乒乓球
开发语言·c++·算法
Madison-No741 分钟前
【C++】关于list的使用&&底层实现
数据结构·c++·stl·list·模拟实现
Bug退退退12342 分钟前
ArrayList 与 LinkedList 的区别
java·数据结构·算法
LBuffer1 小时前
破解入门学习笔记题三十四
java·笔记·学习
缺点内向1 小时前
Java: 如何在Excel中添加或删除分页符?
java·excel