LeetCode~965. 单值二叉树

62 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

题目描述

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false

示例

image.png

输入: [1,1,1,1,1,null,1]
输出: true

image.png

输入: [2,2,2,5,2]
输出: false

提示

    1. 给定树的节点数范围是 [1, 100]
    1. 每个节点的值都是整数,范围为 [0, 99] 。

深度优先搜索

具体实现:

  1. 将当前节点与其子节点进行比较
  2. 元素相同时则向下递归
  3. 不同时则返回结果
  4. 获取递归结果,进行与运算,判断是否有条件
  5. 返回结果
class Solution {
    public boolean isUnivalTree(TreeNode root) {
        // 当节点为空,返回真
        if(null == root){
            return true;
        }
        int val = root.val;
        boolean flag = true;
        // 左边节点递归判断
        if(null != root.left){
            if(val == root.left.val){
                flag &= isUnivalTree(root.left);
            }else{
                return false;
            }
        }
        
        // 右边节点递归判断
        if(null != root.right){
            if(val == root.right.val){
                flag &= isUnivalTree(root.right);
            }else{
                return false;
            }
        }
        // 返回结果
        return flag;
    }
}

广度优先搜索

具体实现:

  1. 定义队列,保存当前节点
  2. 遍历队列中所有元素
  3. 弹出队首元素,进行条件判断,如果不相同则直接返回
  4. 将其子元素入队
  5. 重复3、4两个步骤
  6. 遍历完所有元素,返回结果
class Solution {
    public boolean isUnivalTree(TreeNode root) {
        int val = root.val;
        // 队列定义
        Deque<TreeNode> d = new ArrayDeque<>();
        d.addLast(root);
        // 遍历队列
        while (!d.isEmpty()) {
            // 弹出队首元素进行比较
            TreeNode poll = d.pollFirst();
            if (poll.val != val) return false;
            // 子节点入队
            if (poll.left != null) d.addLast(poll.left);
            if (poll.right != null) d.addLast(poll.right);
        }
        // 返回结果
        return true;
    }
}