538. 把二叉搜尋樹轉換為累加樹給定乙個二叉搜尋樹(binary search tree),把它轉換成為累加樹(greater tree),使得每個節點的值是原來的節點值加上所有大於它的節點值之和。
例如:輸入: 原始二叉搜尋樹:
5/ \
2 13
輸出: 轉換為累加樹:
18/ \
20 13
1.本質還是遞迴思想,但用乙個全域性變數記錄值的方式值得學習!
43. 二叉樹的直徑class solution(object):
def convertbst(self, root):
tmp=0
def dfs(root):
nonlocal tmp
if not root:return root
dfs(root.right)
tmp+=root.val
root.val=tmp
dfs(root.left)
return root
dfs(root)
return root
給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。
示例 :
給定二叉樹
1/ \
2 3
/ \
4 5
返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。
1.最大直徑長度其實就是從a出來到葉子節點的經過的節點數-1
class solution(object):
def diameterofbinarytree(self, root):
res=1
def dfs(root):
nonlocal res
if not root:return 0
left=dfs(root.left)
right=dfs(root.right)
res=max(res,left+right+1)
return max(left,right)+1
dfs(root)
return res-1
DFS 新二叉樹
輸入一串二叉樹,用遍歷前序打出。第一行為二叉樹的節點數n n 26 後面n行,每乙個字母為節點,後兩個字母分別為其左右兒子,空節點用 表示。保證 讀入的第乙個結點就是根結點。前序排列的二叉樹。6 abcbdi cj d i j abdicj題最終目的是輸出二叉樹的前序遍歷結果。首先回顧下前序遍歷的形...
全域性平衡二叉樹
考慮重鏈剖分的時候,我們實際上是對每條重鏈的這個區域性開乙個資料結構維護,而lct是對整顆樹去維護乙個大splay,考慮將lct的思想應用到輕重鏈剖分中。或者考慮lct維護動態dp的時候,每次進行樹的形態調整常數是不是過大了,那麼考慮運用靜態的鏈剖分,用乙個形態不變的平衡樹維護整顆樹。實際上,全域性...
二叉樹的dfs遍歷
bt均為樹的根節點,建立好樹的時候返回的是根節點,類似煉表頭指標 先序遍歷 function preorder bt console.log bt.data preorder bt.left preorder bt.right 中序遍歷 function inorder bt inorder bt....