[英]Why “res” does not change in my DFS function?
我有以下代碼用於計算樹的深度:
class Solution {
public int maxDepth(TreeNode root) {
int res = 0;
DFS(root, res, 1);
return res;
}
private void DFS(TreeNode root, int res, int curDepth) {
if (root == null) {
return;
}
if (curDepth > res) {
res = curDepth;
}
DFS(root.left, res, curDepth + 1);
DFS(root.right, res, curDepth + 1);
}
}
如果我給它輸入[3, 9, 20, null, null, 15, 7]
,我期望res
等於3,因為它代表二叉樹的深度。 但是res
最終等於零。 看來它從未改變。
有人知道為什么嗎?
請記住,在您使用的語言(我認為是Java?)中,函數的參數是通過value傳遞的 。 這意味着當你寫
DFS(root, res, 1)
您實際上並沒有使用變量res
並將其交給DFS
函數進行修改。 而是說“復制碰巧存儲在名為res
的變量中的任何值,然后將該副本交給DFS
。
DFS方法具有一個名為res
的參數,但是在maxDepth
其稱為res
以及您擁有自己的名為res
的變量的maxDepth
並不意味着這些值已鏈接。 舉例來說,我曾經教過我的班級,里面有六個學生,全都叫佐伊(真實的故事!)。盡管他們全都叫佐伊,但他們絕對不是同一個人! 我無法與一個叫佐伊的人交談,並且期望所有其他佐斯都對我們所說的有所了解。 以同樣的方式,你的res
在變maxDepth
是從完全獨立的res
變量DFS
。 他們碰巧有相同的名字,但他們不是同一個人。
您可以通過多種方法來解決此問題,並且可能最好的方法是讓DFS
向您返回值,然后像這樣編寫代碼:
public int maxDepth(TreeNode root) {
return DFS(root, 1);
}
private int DFS(TreeNode root, int currDepth) {
// For you to figure out!
}
從函數返回值是使信息從一種方法獲取並進入另一種方法的首選方法。 因此,現在您需要做的就是考慮要從DFS返回什么值,以及需要進行哪些更新才能使信息正確傳播。
如果要計算節點的高度,只需在左側和右側樹的最大高度中加一個即可。 如果節點不存在,則它沒有高度。
private int height(TreeNode node) {
if (node == null) {
return 0;
}
return 1 + Math.max(height(node.left), height(node.right));
}
您的解決方案不起作用的原因是res
的值是通過諸如templatetypedef之類的值傳遞的。
實際上,您不需要深度參數即可解決此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.