給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。
示例 :
給定二叉樹
1返回3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。/ \2 3
/ \
4 5
注意:兩結點之間的路徑長度是以它們之間邊的數目表示。
要使兩個結點路徑長度最長,只需要求出每個結點左邊的邊數 + 右邊的邊數,迭代出最大值即可。
簡單說就是從左邊最遠處走向右邊最遠處即為路徑最長。
但這樣會存在乙個問題,每乙個結點都要求邊數,會有大量的重複運算,該如何解決?
#view codedefinition 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
力扣 對稱二叉樹
思路 我們可以實現這樣乙個遞迴函式,通過 同步移動 兩個指標的方法來遍歷這棵樹,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 的子樹 右...