112 路徑總和

2021-10-19 11:33:36 字數 2375 閱讀 1052

題目描述

給你二叉樹的根節點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...