給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。方法1.廣度優先說明: 葉子節點是指沒有子節點的節點。
示例:
給定如下二叉樹,以及目標和
sum = 22
,5返回/ \4 8
/ / \
11 13 4
/ \ \
7 2 1
true
, 因為存在目標和為 22 的根節點到葉子節點的路徑5->4->11->2
。
publicboolean haspathsum(treenode root, int
sum)
//路徑總和
//方法一:廣度優先搜尋
//節點佇列
queuenodequeue = new linkedlist<>();
//節點對應的之前的值的和佇列
queuevaluequeue = new linkedlist<>();
//放到佇列中
nodequeue.offer(root);
valuequeue.offer(root.val);
while(!nodequeue.isempty())
//這裡說明如果中間有某個葉子節點,那麼直接跳過,同時,這裡也會把他之前增加的數量poll掉
continue
; }
//這樣,每一次,
if (now.left != null
)
if (now.right != null
) }
return
false
; }
方法二:遞迴
publicboolean haspathsum(treenode root, int
sum)
//路徑總和
//方法二:遞迴
//假定從根節點到當前節點的值之和為 val,我們可以將這個大問題轉化為乙個小問題:
//是否存在從當前節點的子節點到葉子的路徑,滿足其路徑和為 sum - val
//如果兩個都為空,說明是葉子節點
if (root.left == null && root.right == null
)
//遞迴左節點和右節點
return haspathsum(root.left,sum-root.val) || haspathsum(root.right,sum-root.val);
}
(力扣每日一題)路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。解題思路 1 使用廣度優先搜尋的方式,記錄從根節點到當前節點的路徑和。2 使用兩個佇列,分別儲存將要遍歷的節點,以及根節點到這些節點的路徑和。class so...
力扣 437 路徑總和III
參考自 字首和 是指到達當前元素的路徑之前所有元素的和 definition for a binary tree node.class treenode def init self,val 0,left none,right none self.val val self.left left self...
力扣112 路徑總和(遞迴 迭代)
力扣112.路徑總和 遞迴 迭代 給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1 返回 true,因為存在目標和為 2...