LeetCode 437 路徑個數

2021-12-30 02:09:09 字數 1086 閱讀 4293

大意:

給你乙個每個節點都包含int值的二叉樹。

計算能累加成指定值的路徑的個數。

路徑不需要從根節點開始到葉子節點,但必須是往下走的(只能從父節點到子節點)。

樹的節點數在1000以內,並且給定的值到-1000000到1000000之間。

例子:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8

10/ \

5 -3

/ \   \

3 2 11

/ \ \

3 -2 1

返回 3. 累加成8的路徑數為:

5 -> 3 5 -> 2 -> 1 -3 -> 11這道題要從每個節點去判斷往下走不斷累加能不能達到要求的數字,是乙個比較麻煩的過程,我們把它分解成兩個過程:

乙個是對每個節點,都計算往下面不同分支走能不能累加成指定的值; 另乙個是從上往下去對每個節點進行上一條的判斷。

要記錄每乙個節點,我們使用佇列來進行節點的記錄比較方便,佇列的先進先出的,我們從根節點開始,將其加入佇列中,判斷能不能找到滿足要求的路徑,然後將其兩個子節點加到佇列中(當然要判斷有無子節點),然後將根節點踢出佇列,往後一次都是這個過程。

而對每個節點進行路徑累加和的判斷,用遞迴比較合適,這裡要注意的是,乙個節點往下走路徑的過程中,並不是只要找到一條路徑就可以了,而是要計算有多少條路徑滿足條件,也就是說對每個節點,找完左節點即使找到了,還要找右節點,一條路徑滿足後,如果對路徑的最後乙個節點還有子節點,那還要往下看看能不能繼續累加滿足,那又是一條新路徑,因為有可能下面兩個節點的值互相抵消了。所以在遞迴的過程中,函式返回的值不應該是能不能的布林值,而是乙個不斷累加的數字,這個數字代表從乙個節點往下走找到的路徑數量。

/*** definition for a binary tree node.

* public class treenode

* }*/public class solution

}return result;

}// 計算節點能達成條件的情況數量

public int cansum(treenode root, int targetsum, int tempsum)

}

Leetcode 437 路徑總和 III

給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個節點,且節點數值範圍是 1000000,1000000 的整數。示例 題目解釋 由題意可知,即從二叉...

LeetCode 437 路徑總和 III

給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個節點,且節點數值範圍是 1000000,1000000 的整數。示例 root 10,5,3,3,2...

leetcode 437 路徑總和 III

給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個 示例 root 10,5,3,3,2,null,11,3,2,null,1 sum 8 10 5 ...