📅  最后修改于: 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$代表树的节点数。