給定一棵二叉樹的根 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 對樹上的每一片葉子,我們都要找出從根到該葉子的路徑所表示的數字。返回這些數字之和。題目資料保證...