力扣活動0310 543 二叉樹的直徑

2022-01-26 12:31:00 字數 1301 閱讀 5847

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。

示例 :

給定二叉樹

1

/ \2 3

/ \

4 5

返回3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。

注意:兩結點之間的路徑長度是以它們之間邊的數目表示。

要使兩個結點路徑長度最長,只需要求出每個結點左邊的邊數 + 右邊的邊數,迭代出最大值即可。

簡單說就是從左邊最遠處走向右邊最遠處即為路徑最長。

但這樣會存在乙個問題,每乙個結點都要求邊數,會有大量的重複運算,該如何解決?

#

definition for a binary tree node.

#class treenode(object):

#def __init__(self, x):

#self.val = x

#self.left = none

#self.right = none

class

solution(object):

defdiameterofbinarytree(self, root):

""":type root: treenode

:rtype: int

"""def

layers(node):

ifnot

node:

return

0

return 1+max(layers(node.left),layers(node.right))

ifnot

root:

return

0

#return layers(root.right)

stack =[root]

ret = -1

while

len(stack):

node =stack.pop()

left , right =0,0

ifnode.left:

left =layers(node.left)

ifnode.right:

right =layers(node.right)

if left+right >ret:

ret = left+right

return ret

view code

力扣 對稱二叉樹

思路 我們可以實現這樣乙個遞迴函式,通過 同步移動 兩個指標的方法來遍歷這棵樹,pp 指標和 qq 指標一開始都指向這棵樹的根,隨後 pp 右移時,qq 左移,pp 左移時,qq 右移。每次檢查當前 pp 和 qq 節點的值是否相等,如果相等再判斷左右子樹是否對稱。class solution bo...

二叉樹 力扣 二叉樹的最近公共祖先

如果二叉樹結點中儲存了雙親的位置和值域的話 比如雙親表示法或者是孩子雙親表示法 可以轉換為兩個鍊錶求交點的問題 二叉搜尋樹特點 根節點比左子樹中所有節點都大,比所有右子樹中的節點都小 根據中序遍歷可以得到乙個有序序列 如果樹是二叉搜尋樹 二叉排序樹 此時分為如下幾種情況 假設我們要找的是p,q的公共...

力扣 814 二叉樹剪枝

給定二叉樹根結點 root 此外樹的每個結點的值要麼是 0,要麼是 1。返回移除了所有不包含 1 的子樹的原二叉樹。節點 x 的子樹為 x 本身,以及所有 x 的後代。示例1 輸入 1,null,0,0,1 輸出 1,null,0,null,1 解釋 只有紅色節點滿足條件 所有不包含 1 的子樹 右...