題目描述
給你二叉樹的根節點root
和乙個表示目標和的整數targetsum
,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和targetsum
。
葉子節點是指沒有子節點的節點。
示例 1:
輸入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetsum = 22
輸出:true
示例2:
輸入:root = [1,2,3], targetsum = 5
輸出:false
示例 3:
輸入:root = [1,2], targetsum = 0
輸出:false
題解:
法一:遞迴。
自頂向下,每走到乙個節點讓targetsum
減去該節點的值,當走到葉節點時,若targetsum
整好等於0
,說明找到一條路徑,直接返回即可。
時間複雜度:o(n
)o(n)
o(n)
額外空間複雜度:平均o(l
ogn)
o(logn)
o(logn
),最壞 o(n
)o(n)
o(n)
/**
* definition for a binary tree node.
* struct treenode
* treenode(int x) : val(x), left(nullptr), right(nullptr) {}
* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}
* };
*/class
solution};
/*記憶體:20.7mb,擊敗:20.81%
*/
也可以用非遞迴來完成:
/**
* definition for a binary tree node.
* struct treenode
* treenode(int x) : val(x), left(nullptr), right(nullptr) {}
* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}
* };
*/class
solution);
while
( stk.
size()
));if
( root-
>left ) stk.
push_back()
;}return
false;}
};/*記憶體:20.8mb,擊敗:9.64%
*/
法二:
廣搜。記錄根節點到當前節點的路徑之和。
/**
* definition for a binary tree node.
* struct treenode
* treenode(int x) : val(x), left(nullptr), right(nullptr) {}
* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}
* };
*/class
solution);
while
( q.
size()
));if
( root-
>right ) q.
push()
;}return
false;}
};/*記憶體:21mb,擊敗:5.14%
*/
112 路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和sum 22,5 48 1113 4 721返回true,因為存在目標和為 22 的根節點到葉子節點的路徑5 4 11 2。d...
112路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。進行分析,遞迴終止的條件是什麼?一次遞迴中要進行什麼操作?遞迴想要返回什麼資訊?終止條件 結點為空 遞迴中操作 sum減去當前結點值,當sum為0且當前為葉子...
112 路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1返回 true,因為存在目標和為 22 的根節點到葉子節點的路徑 5 4...