我正在解決
對于輸入
root = [1,2,3,4,5](上圖),輸出應為:[[4,5,3],[2],[1]].
這歸結為找到樹的每個節點的高度:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> m;
int dfs(TreeNode* root) {
if(!root) return -1;
int l=dfs(root->left);
int r=dfs(root->right);
int height=max(l,r) 1;
if(height==m.size()) m.push_back({});
m[height].push_back(root->val);
//delete root;
return height;
}
vector<vector<int>> findLeaves(TreeNode* root) {
dfs(root);
return m;
}
};
上面的代碼被接受了,但那是因為 OJ實際上并沒有檢查節點是否被洗掉。我的問題是,如何洗掉節點?具體來說:
一個。如果我添加洗掉(上面的注釋行),我會收到運行時錯誤;
灣。我不能root=nullptr像 Java 人那樣設定,因為 C 默認沒有垃圾收集,因此root節點不會真正被洗掉(記憶體將繼續被占用)。
C。我認為我們不能root在其他任何地方洗掉該節點。
那么我該如何去實際洗掉節點呢?
謝謝!
uj5u.com熱心網友回復:
您的放置delete是正確的,但由于我們不知道如何root分配,我們無法確定邏輯上delete是否正確。順便說一句,釋放記憶體但它不會洗掉指標本身。你可以這樣做。此外,在呼叫 to 后參考指標并設定為完全洗掉樹。deleteroot->left = root->right = nullptrfindLeavesrootnullptrdfs()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/482731.html
