樹的遞迴專題

2021-07-25 12:08:49 字數 1231 閱讀 1000

leetcode 543. 二叉樹的直徑

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

示例 :

給定二叉樹

1/ \

2   3

/ \     

4   5    

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

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

由題意可知:乙個節點的最大直徑 = 它左樹的高度 +  它右樹的高度

因此本題遍歷每個節點,找出所有節點中的直徑的最大值即可。

剛開始這麼寫的

private int max = 0;

public int diameterofbinarytree(treenode root)

int left = depth(root.left);

int right = depth(root.right);

max = max > (left + right) ? max : (left + right);

diameterofbinarytree(root.left);

diameterofbinarytree(root.right);

return max;

}private int depth(treenode root)

return math.max(depth(root.left), depth(root.right)) + 1;

}

但是發現效率不高。仔細想了一下,造成效率不高的原因主要是這麼寫其實進行了兩次遍歷。

其實我們在求每個節點的高度的時候,順帶就可以求出其直徑,第二種方式**如下。

public int diameterofbinarytree(treenode root) 

private int depth(treenode root)

int leftdep = depth(root.left);

int rightdep = depth(root.right);

max = max > (leftdep + rightdep) ? max : (leftdep + rightdep);

return (leftdep > rightdep ? leftdep : rightdep) + 1;

}

專題講解 樹專題 遞迴思路處理樹

我們都以二叉樹作為乙個標準的例子分析樹的問題常用的方法。首先我們先來分析遞迴的方法。有乙個很好的二叉樹的三步走戰略,我覺著很值得學習。三步走 方法的三步分別為 可以看出,核心有兩個,乙個是拆解子問題,乙個是是否使用全域性變數。全域性變數的使用很靈活的,因為python是可以返回多個變數,因此只是乙個...

函式的遞迴呼叫 專題

遞迴呼叫 函式的遞迴呼叫,就是函式在執行的時候自動呼叫自己!功能 當我們把乙個大問題按照某種解決方案細化為若干個小問題的時候,結果我們發現這些小問題的解決方案又和前面大問題的解決方案是一樣的!語法格式 function 函式名 遞迴出口 不要忘了,不然進入死迴圈 呼叫其他函式 函式名 函式名 所以,...

遞推遞迴專題總結

這個專題的題目比較少,但是還是沒能做完,我感到很殘酷,好多人都做完了我卻沒有,因為後面幾道我感覺很難,這個專題的題目給我的感覺就是用 來表達數學,只要找到了題目中的規律,題目就會變得很簡單,否則很難做出來。這個專題給我感受最深的是馬攔過河卒那道,那道題很好理解,但是我沒能做出來,就是因為沒能找到其中...