給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
1、最直接的方法就是利用遞迴,遍歷整棵樹:如果當前節點不是葉子,對它的所有孩子節點,遞迴呼叫 haspathsum 函式,其中 sum 值減去當前節點的權值;如果當前節點是葉子,檢查 sum 值是否為 0,也就是是否找到了給定的目標和。
class solution ;
};
複雜度分析
時間複雜度:我們訪問每個節點一次,時間複雜度為 o(n) ,其中n 是節點個數。
空間複雜度:最壞情況下,整棵樹是非平衡的,例如每個節點都只有乙個孩子,遞迴會呼叫 nnn 次(樹的高度),因此棧的空間開銷是 o(n) 。但在最好情況下,樹是完全平衡的,高度只有 log(n),因此在這種情況下空間複雜度只有 o(log(n)) 。
2、迭代法。使用兩個棧,乙個棧儲存節點,乙個棧儲存遍歷過的節點的總和,若遍歷到葉子節點且該節點的棧的值是sum值就返回true
class solution
if(pnode->right)
}return false;
}};。
複雜度分析
時間複雜度:和遞迴方法相同是 o(n)o(n)o(n)。
空間複雜度:當樹不平衡的最壞情況下是 o(n)o(n)o(n) 。在最好情況(樹是平衡的)下是 o(logn)o(\log n)o(logn)
參考:
二叉樹路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1 返回 true,因為存在目標和為 22 的根節點到葉子節點的路徑 5 ...
二叉樹的路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1返回 true,因為存在目標和為 22 的根節點到葉子節點的路徑 5 4...
二叉樹的路徑總和
definition for a binary tree node.struct treenode 給定乙個二叉樹和乙個目標和,找到所有從根節點到葉子節點路徑總和 等於給定目標和的路徑。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7...