Leetcode-----814. 二叉樹剪枝
給定二叉樹根結點 root
,此外樹的每個結點的值要麼是 0,要麼是 1。
返回移除了所有不包含 1 的子樹的原二叉樹。
( 節點 X 的子樹為 X 本身,以及所有 X 的後代。)
示例1: 輸入: [1,null,0,0,1] 輸出: [1,null,0,null,1] 解釋: 只有紅色節點滿足條件“所有不包含 1 的子樹”。 右圖為返回的答案。
示例2: 輸入: [1,0,1,0,0,0,1] 輸出: [1,null,1,null,1]
示例3: 輸入: [1,1,0,1,1,0,1,0] 輸出: [1,1,0,1,1,null,1]
說明:
- 給定的二叉樹最多有
100
- 每個節點的值只會為
0
或1
。
----------------------------------------------------------------------------------------------------------------------------------
題意就是把沒有1的子樹全部去掉。那麼先遞迴到樹的底部(葉子節點)然後如果如果這個葉子為0,那麼去掉,這樣自下而上的將不含1的子樹去除。 而且要被去掉的節點都在被去除之前有著同樣的特點,左右子樹全為NULL且val=0.
AC:
class Solution {
public:
TreeNode* pruneTree(TreeNode* root) {
if(root==NULL)
{
return NULL;
}
root->left=pruneTree(root->left); //這一句和下一句要寫在下面的if()上面,不然無法實現自下向上來將所有符合 //條件的節點刪除,例如樣例輸入的第二個。
root->right=pruneTree(root->right);
if (root->left==NULL&&root->right==NULL&&root->val==0)
return NULL;
return root;
}
};
自己寫雖然也能AC,但程式碼還是囉嗦,不簡潔,還很多,還很遠。