📜  检查给定的二叉树是否是倾斜二叉树?(1)

📅  最后修改于: 2023-12-03 15:26:49.429000             🧑  作者: Mango

检查给定的二叉树是否是倾斜二叉树?

一个二叉树被称为倾斜二叉树,当且仅当这个二叉树要么是左倾斜 (left-skewed),要么是右倾斜 (right-skewed)。 左倾斜的二叉树满足所有非叶子节点都有一个左孩子但是右孩子为空,右倾斜的二叉树满足所有非叶子节点都有一个右孩子但是左孩子为空。

我们需要编写一个函数,用于检查给定的二叉树是否是倾斜二叉树,函数的参数为根节点,返回值为Bool类型,代表该二叉树是否倾斜二叉树。

算法思路

我们可以通过递归的方式来检查这个二叉树是否是倾斜二叉树。从根节点开始递归,若满足以下情况,则当前的子树为倾斜二叉树:

  • 当前节点的左孩子为空且右孩子不为空
  • 当前节点的右孩子为空且左孩子不为空
  • 当前节点没有孩子

如果当前节点不是倾斜二叉树,则返回False, 如果当前节点是倾斜二叉树,则继续递归左右子树。

代码实现

下面是用Python实现的代码:

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


def is_skewed(root: TreeNode) -> bool:
    if not root:
        return True
      
    if root.left and root.right:
        return False
    
    if not root.left and not root.right:
        return True

    if root.left and not root.right:
        return is_skewed(root.left)
    
    if not root.left and root.right:
        return is_skewed(root.right)
时间复杂度

因为我们需要遍历一遍树,所以时间复杂度为$O(n)$,其中$n$代表树的节点数。