給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
說明: 葉子節點是指沒有子節點的節點。
示例:給定如下二叉樹,以及目標和 sum = 22,
5
/ \4 8
/ / \
11 13 4
/ \ \
7 2 1
返回 true, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2。
//dfs的經典寫法:1.判斷根節點是否為空;2.判斷是不是葉子結點;3.判斷左右孩子
class
solution
}
給定乙個二叉樹和乙個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。
說明: 葉子節點是指沒有子節點的節點。
示例:給定如下二叉樹,以及目標和 sum = 22,
5
/ \4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[[5,4,11,2],
[5,8,4,5]
]
//與112題相比,多了把結點路徑記錄下來
class
solution
if( root.left != null)
if( root.right != null)
path.
remove
(path.
size()
-1);
//退回到父節點
return pathlist;
}}
給定乙個二叉樹,它的每個結點都存放著乙個整數值。
找出路徑和等於給定數值的路徑總數。
路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。
二叉樹不超過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
//此題用暴力遞迴解法,也就是雙層遞迴;
//第一層遞迴,每乙個結點都要以它作為起點去計算是否有path;
//第二層遞迴,在考慮當前結點往下有無path的時候,還要考慮它往左有可能有path,往右也有可能。
class
solution
//找以每個結點為開始的路徑和是否等於sum
public
intdfs
(treenode root,
int sum)
}
leetcode刷題之樹
樹的三種遍歷方式 的 非遞迴版本 中序遍歷 下面的解法就是相當於 第一趟先把元素按照中序的順序進棧 第二趟 是相當於把 null標記過的位置給拿出來 class solution else return res 先序遍歷 class solution else return res 公共父節點 pu...
刷題 樹相關leetcode2
104.二叉樹的最大深度 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。思路 遍歷樹的每個分支的深度。如果當前分支深度大於定義的最大深度,則將當前分支的最大值賦給定義的最大值 var maxdepth function r...
leetcode刷題python之二叉樹的層次遍歷
題目 給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回其層次遍歷結果 3 9,20 15,7 definition for a binary tree node.class treen...