給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義為:
乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1 。
# definition for a binary tree node.
# class treenode(object):
# def __init__(self, val=0, left=none, right=none):
# self.val = val
# self.left = left
# self.right = right
class
solution
(object):
defisbalanced
(self, root)
:#1.找終止條件。 什麼情況下遞迴應該終止?自然是子樹為空的時候,空樹自然是平衡二叉樹了。
ifnot root:
return
true
#2.應返回什麼資訊:這裡我們返回的資訊應該是既包含子樹的深度的int型別的值
#又包含子樹是否是平衡二叉樹的boolean型別的值。
return
abs(self.depth(root.left)
- self.depth(root.right)
)<=
1and \
self.isbalanced(root.left)
and self.isbalanced(root.right)
#3本級遞迴應該做什麼。 知道了第二步的返回值後,這一步就很簡單了
defdepth
(self, root)
:# 1.找終止條件。到達葉子節點。
ifnot root:
return
0# 2.返回值。返回樹的深度,左右子樹中最大長度。
return
max(self.depth(root.left)
, self.depth(root.right))+
1
class
solution
:def
isbalanced_solution
(self, proot)
:# write code here
if proot is
none
:return
true
left = self.getdeepth(proot.left)
right = self.getdeepth(proot.right)
ifabs
(right - left)
>1:
return
false
return self.isbalanced_solution(proot.right)
and self.isbalanced_solution(proot.left)
defgetdeepth
(self,root)
:if root is
none
:return
0 nright = self.getdeepth(root.right)+1
nleft = self.getdeepth(root.left)+1
return
max(nright,nleft)
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。
class
solution
:def
treedepth
(self, proot)
:# 1.確定遞迴結束條件,遍歷到葉子節點
ifnot proot:
return
0# 2.遞迴返回值,此處即為每次遍歷節點深度
left_depth = self.treedepth(proot.left)+1
right_depth = self.treedepth(proot.right)+1
return
max(left_depth, right_depth)
判斷平衡二叉樹
演算法 樹 平衡二叉樹 平衡二叉樹的概念 左右節點的樹高之差小於1。1.計算節點的高。通過遞迴,求出左右子樹的高度,當前節點的高度,最大的那乙個 1。int getheight treenode root 2.通過遞迴的方法計算左子樹和右子樹的樹高之差是否有小於1的,有就直接返回false.publ...
判斷平衡二叉樹
package com.jsp.tree 判斷是否是平衡二叉樹 author jiangshipan 任何乙個節點 左子樹和右子數高度差小於1 以每乙個節點為頭的樹都是平衡的,則這個樹平衡 可能 1.左樹不平 2.右樹不平 3.左或右高 整棵樹 public class isbalancedtree...
判斷平衡二叉樹
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。最直接的做法,遍歷每個節點,借助乙個獲取樹深度的遞迴函式,根據該節點的左右子樹高度差判斷是否平衡,然後遞迴地對左右子樹進行判斷 pubic class solution private intmaxdepth treenode root 這種做法有很明顯...