題目:輸入一顆二叉樹(shù)和一個(gè)整數(shù)成玫,打印出二叉樹(shù)中結(jié)點(diǎn)值的和為輸入整數(shù)的所有路徑龄寞。路徑定義為從樹(shù)的根結(jié)點(diǎn)開(kāi)始往下一直到葉結(jié)點(diǎn)所經(jīng)過(guò)的結(jié)點(diǎn)形成一條路徑.
核心代碼:
<pre><code>` var pathList:[[String]] = []
var path:[String] = []
func findPath(root:TreeNode?,targetNum:Int) {
if root == nil {
return
}
path.append(root!.data!)
let target:Int = targetNum - Int(root!.data!)!
// 葉子節(jié)點(diǎn)奈泪,且滿足要求
if target == 0 && root?.leftChild == nil && root?.rightChild == nil {
pathList.append(path)
}
// 遍歷左子節(jié)點(diǎn)
if root?.leftChild != nil {
findPath(root: root?.leftChild, targetNum: target)
}
// 遍歷右子節(jié)點(diǎn)
if root?.rightChild != nil {
findPath(root: root?.rightChild, targetNum: target)
}
path.removeLast()
}`</code></pre>
測(cè)試數(shù)據(jù):
<pre><code>`var sumListData:[String] = ["10","5","4","#","#","7","#","#","12","#","#"]
var sumNode:TreeNode?
tree.rootIndex = -1
tree.createTreeByPreOrder(root: &sumNode, listData: sumListData)
binaryTree.findPath(root: sumNode, targetNum: 22)
print("FlyElephant---和的路徑----(binaryTree.pathList)")`</code></pre>
FlyElephant.png