leetcode刷題筆記一百一十三題 路徑問題II
阿新 • • 發佈:2020-08-07
leetcode刷題筆記一百一十三題 路徑問題II
源地址:113. 路徑總和 II
問題描述:
給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定如下二叉樹,以及目標和 sum = 22,5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
/** 本題中使用回溯思想,需要注意的是對於每個結點的左右節點進行遍歷,由於只使用一個Path變數儲存遍歷路徑,所以回退時需要注意。 */ /** * Definition for a binary tree node. * class TreeNode(var _value: Int) { * var value: Int = _value * var left: TreeNode = null * var right: TreeNode = null * } */ import scala.collection.mutable object Solution { def pathSum(root: TreeNode, sum: Int): List[List[Int]] = { if (root == null) return List() var path = new mutable.ListBuffer[Int]() val res = new mutable.ListBuffer[List[Int]]() dfs(root, sum) def dfs(root: TreeNode, sum:Int): Unit = { //回溯條件一 if (root == null) return path += root.value //回溯條件二 滿足條件下儲存Path if((sum - root.value) == 0 && root.left == null && root.right == null){ res += path.toList //這種情況下可能需要遍歷另一子樹,需要回溯 path = path.dropRight(1) return } dfs(root.left, sum - root.value) dfs(root.right, sum - root.value) path = path.dropRight(1) } return res.toList } }