📜  检查二叉树是否是单值的(1)

📅  最后修改于: 2023-12-03 14:55:44.238000             🧑  作者: Mango

检查二叉树是否是单值的

问题描述

给定一棵二叉树,如果所有节点的值都相同,则该二叉树被定义为“单值”二叉树。编写一个函数,判断给定的二叉树是否单值。

示例

输入:

     1
    / \
   1   1
  / \   \
 1   1   1

输出: true

输入:

     2
    / \
   2   2
      / \
     5   2

输出: false

解决方案

题目要求我们判断给定的二叉树是否为单值二叉树,可以使用递归解决该问题。具体思路是,首先判断当前节点的值是否与其左右子树的值相等,如果相等,则继续递归判断其左右子树是否是单值二叉树,如果都是,则整个二叉树为单值二叉树。

代码实现

使用 Python 语言实现以上思路:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def is_unival_tree(root: TreeNode) -> bool:
    if not root:
        return True
    if root.left and root.left.val != root.val:
        return False
    if root.right and root.right.val != root.val:
        return False
    return is_unival_tree(root.left) and is_unival_tree(root.right)

使用 Java 语言实现以上思路:

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

class Solution {
    public boolean isUnivalTree(TreeNode root) {
        if (root == null) {
            return true;
        }
        if (root.left != null && root.left.val != root.val) {
            return false;
        }
        if (root.right != null && root.right.val != root.val) {
            return false;
        }
        return isUnivalTree(root.left) && isUnivalTree(root.right);
    }
}
总结

本题解采用了递归的思路来解决题目要求,通过对当前节点的判断和递归判断其左右子树来实现整个二叉树的判断。该算法时间复杂度为 $O(n)$,其中 $n$ 为节点数目。