樹(4)-----樹的高度
阿新 • • 發佈:2018-06-04
AR 結點之間 最大 tro 靜態變量 深度 help pan self.
1、最大深度:(遞歸)
def maxDepth(root): """ :type root: TreeNode :rtype: int """ if root: left=maxDepth(root.left) right=maxDepth(root.right) return 1+max(left,right) return 0
2、樹的直徑長度【對每個節點進行一個左子樹高度加右子樹高度的計算】
給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。
示例 :
給定二叉樹
1 / 2 3 / \ 4 5
返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。
註意:兩結點之間的路徑長度是以它們之間邊的數目表示。
def diameterOfBinaryTree( root): def depth_diam(node): if node is None: return 0, 0 lde, ldi = depth_diam(node.left) rde, rdi= depth_diam(node.right) return max(lde, rde) + 1, max(ldi, rdi, lde + rde) return depth_diam(root)[1]
3、求樹的坡度(遞歸,註意實例變量和靜態變量的使用)
給定一個二叉樹,計算整個樹的坡度。
一個樹的節點的坡度定義即為,該節點左子樹的結點之和和右子樹結點之和的差的絕對值。空結點的的坡度是0。
整個樹的坡度就是其所有節點的坡度之和。
示例:
輸入: 1 / 2 3 輸出: 1 解釋: 結點的坡度 2 : 0 結點的坡度 3 : 0 結點的坡度 1 : |2-3| = 1 樹的坡度 : 0 + 0 + 1 = 1
class Solution(object): tilt=0 def findTilt(self, root): """ :type root: TreeNode :rtype: int """ def helper(root): if not root: return 0 left=helper(root.left) right=helper(root.right) self.tilt+=abs(left-right) return left+right+root.val helper(root) return self.tilt
4、判斷一棵樹是否為高度平衡二叉樹
高度平衡二叉樹的定義是一個二叉樹的每個節點的左右子樹的高度差絕對值不超過1。
def isBalanced(self, root): """ :type root: TreeNode :rtype: bool """ def helper(root): if not root: return 0 left=helper(root.left) right=helper(root.right) if left==-1 or right==-1 or abs(left-right)>1: return -1 return 1+max(left,right) res=helper(root) return False if res==-1 else True
樹(4)-----樹的高度