二叉樹全域性變數dfs

2021-10-09 15:31:41 字數 1214 閱讀 5388

538. 把二叉搜尋樹轉換為累加樹

給定乙個二叉搜尋樹(binary search tree),把它轉換成為累加樹(greater tree),使得每個節點的值是原來的節點值加上所有大於它的節點值之和。

例如:輸入: 原始二叉搜尋樹:

5/   \

2     13

輸出: 轉換為累加樹:

18/   \

20     13

1.本質還是遞迴思想,但用乙個全域性變數記錄值的方式值得學習!

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

43. 二叉樹的直徑

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

示例 :

給定二叉樹

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....