LeetCode1080 根到葉路徑上的不足節點

2021-09-24 07:37:29 字數 1549 閱讀 4432

給定一棵二叉樹的根 root,請你考慮它所有 從根到葉的路徑:從根到任何葉的路徑。(所謂乙個葉子節點,就是乙個沒有子節點的節點)

假如通過節點 node 的每種可能的 「根-葉」 路徑上值的總和全都小於給定的 limit,則該節點被稱之為「不足節點」,需要被刪除。

請你刪除所有不足節點,並返回生成的二叉樹的根。

輸入:root = [1,2,3,4,-99,-99,7,8,9,-99,-99,12,13,-99,14], limit = 1

輸出:[1,2,3,4,null,null,7,8,9,null,14]
示例 2:

輸入:root = [5,4,8,11,null,17,4,7,1,null,null,5,3], limit = 22

輸出:[5,4,8,11,null,17,4,7,null,null,null,5]
輸入:root = [5,-6,-6], limit = 0
輸出:
給定的樹有 1 到 5000 個節點

因為需要考慮根到葉節點路徑上的所有值,因此想要判斷某個節點是否不足,只有遍歷經過該節點所有路徑。

我們可以先遍歷左子樹,再遍歷右子樹,得出經過該節點的路徑的最大值。從形式上看,和後序遍歷很類似,因此可以採用後序遍歷的方法

具體流程:

(1)計算當前經過路徑上的值的總和

(2)判斷當前節點是否為根結點

(3)計算經過該節點及其左孩子的路徑上的值的總和

(4)計算經過該節點及其右孩子的路徑上的值的總和

(5)判斷節點的左右孩子是否為不足節點

(6)返回經過該節點的路徑的最大值

注意:必須使用delete將節點刪除以釋放記憶體,否則會有個別測試用例不通過

c++**:

class solution 

long long postorder(treenode* root, long long pre_sum, int& limit)

} if (root->right)

} long long root_value = max(left_value, right_value);

return root_value;

} long long max(long long a, long long b)

};

執行效率:

leetcode1022 從根到葉的二進位制數之和

給出一棵二叉樹,其上每個結點的值都是 0 或 1 每一條從根到葉的路徑都代表乙個從最高有效位開始的二進位制數。例如,如果路徑為 0 1 1 0 1,那麼它表示二進位制數 01101,也就是 13 對樹上的每一片葉子,我們都要找出從根到該葉子的路徑所表示的數字。以 10 9 7 為模,返回這些數字之和...

Leetcode 1022從根到葉的二進位制之和

給出一棵二叉樹,其上每個結點的值都是 0 或 1 每一條從根到葉的路徑都代表乙個從最高有效位開始的二進位制數。例如,如果路徑為 0 1 1 0 1,那麼它表示二進位制數 01101,也就是 13 對樹上的每一片葉子,我們都要找出從根到該葉子的路徑所表示的數字。返回這些數字之和。題目資料保證答案是乙個...

Leetcode從根到葉的二進位制數之和

題目描述 給出一棵二叉樹,其上每個結點的值都是 0 或 1 每一條從根到葉的路徑都代表乙個從最高有效位開始的二進位制數。例如,如果路徑為 0 1 1 0 1,那麼它表示二進位制數 01101,也就是 13 對樹上的每一片葉子,我們都要找出從根到該葉子的路徑所表示的數字。返回這些數字之和。題目資料保證...