543 二叉樹的直徑

2021-09-26 06:14:29 字數 1284 閱讀 2696

其實就是求每個節點左右子樹高度和的最大值

可以結合樹的深度的遞迴求法,在遞迴的同時記錄每個節點高度和的最大值

class solution(object):

def __init__(self):

self.depth_max = 0

def diameterofbinarytree(self, root):

if not root:

return 0

def depth(root):

if not root:

return 0

# if not root.left or not root.right:

# return 1

lmax = depth(root.left)

rmax = depth(root.right)

self.depth_max = max(self.depth_max, lmax + rmax)

return max(lmax, rmax) + 1

depth(root)

return self.depth_max

三種可能

返回三種情況中的最大值

class solution(object):

def diameterofbinarytree(self, root):

if not root:

return 0

l = self.diameterofbinarytree(root.left) #左子樹最大直徑

r = self.diameterofbinarytree(root.right) #右子樹最大直徑

lh = self.height(root.left) #左子樹深度

rh = self.height(root.right) #右子樹深度

return max(l,r,lh+rh)

#計算樹的深度

def height(self,root):

if not root:

return 0

if not root.left and not root.right:

return 1

return max(self.height(root.left), self.height(root.right)) + 1

543 二叉樹的直徑

一種比較好的思路是。隨便找乙個點 一般取根節點 找到這棵樹中,距離這個點最遠的點,再從找到的這個點開始,找到距離它最遠的點。這種思路是帶有很強烈的數學成分。證明可自行解決。b站大佬是用動歸來做的,我不是很好理解。這裡給出一種基礎做法,即借助求二叉樹的深度的方式。對於每乙個節點,求其左右子樹的最大深度...

543 二叉樹的直徑

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。示例 給定二叉樹 1 2 3 4 5返回3,它的長度是路徑 4,2,1,3 或者 5,2,1,3 注意 兩結點之間的路徑長度是以它們之間邊的數目表示。分析 考慮分治法。先求某節點到其...

543 二叉樹的直徑

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。示例 給定二叉樹 1 2 3 4 5返回3,它的長度是路徑 4,2,1,3 或者 5,2,1,3 注意 兩結點之間的路徑長度是以它們之間邊的數目表示。class solution o...