mirror of
https://github.com/SunnyQjm/algorithm-review.git
synced 2026-06-03 08:16:43 +08:00
add: chapter10
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env python
|
||||
# coding=utf-8
|
||||
|
||||
#######################################################################################
|
||||
# Leetcode 110 平衡二叉树
|
||||
#
|
||||
# 给定一个二叉树,判断它是否是高度平衡的二叉树。
|
||||
# 本题中,一棵高度平衡二叉树定义为:
|
||||
# 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
|
||||
#
|
||||
# 示例 1:
|
||||
# 给定二叉树 [3,9,20,null,null,15,7]
|
||||
#
|
||||
# 3
|
||||
# / \
|
||||
# 9 20
|
||||
# / \
|
||||
# 15 7
|
||||
# 返回 true 。
|
||||
#
|
||||
# 示例 2:
|
||||
# 给定二叉树 [1,2,2,3,3,null,null,4,4]
|
||||
#
|
||||
# 1
|
||||
# / \
|
||||
# 2 2
|
||||
# / \
|
||||
# 3 3
|
||||
# / \
|
||||
# 4 4
|
||||
# 返回 false 。
|
||||
#######################################################################################
|
||||
|
||||
class TreeNode:
|
||||
def __init__(self, x):
|
||||
self.val = x
|
||||
self.left = None
|
||||
self.right = None
|
||||
|
||||
def __repr__(self):
|
||||
if self:
|
||||
return "{}->{}->{}".format(self.val, repr(self.left), repr(self.right))
|
||||
|
||||
|
||||
class Solution:
|
||||
def isBalanced(self, root):
|
||||
"""
|
||||
:type root: TreeNode
|
||||
:rtype bool
|
||||
|
||||
(knowledge)
|
||||
|
||||
思路:
|
||||
1. 直接递归计算每个节点左右子树的高度;
|
||||
2. 根据AVL树的特性,如果任意一个节点的左右子树的高度差大于一,则该树不是AVL树,标记器高度为-1;
|
||||
3. 如果某个子树的高度计算为-1,则表示该子树不是AVL树,-1会一直传递到顶层。
|
||||
"""
|
||||
def preOrderTraversal(root):
|
||||
if not root:
|
||||
return 0
|
||||
leftNum = preOrderTraversal(root.left)
|
||||
rightNum = preOrderTraversal(root.right)
|
||||
if leftNum == -1 or rightNum == -1 or abs(leftNum - rightNum) > 1:
|
||||
return -1
|
||||
return 1 + max(leftNum, rightNum)
|
||||
return preOrderTraversal(root) != -1
|
||||
Reference in New Issue
Block a user