LeetCode814 二叉树剪枝
给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。
返回移除了所有不包含 1 的子树的原二叉树。
( 节点 X 的子树为 X 本身,以及所有 X 的后代。)
非常简单一个递归就可以解决,但是要注意两点:一是一定要检查完两个子树和本身之后再返回,不要出现检查完左子树为true就返回,这样可能没有正确删除右子树;二是当整个树都为0的时候要返回nullptr,要注意判断。
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 TreeNode* pruneTree(TreeNode* root) { 13 bool ret=recursive_delete(root); 14 if(ret) 15 return root; 16 else 17 return nullptr; 18 } 19 20 bool recursive_delete(TreeNode* curNode){ 21 if(curNode==nullptr) 22 return false; 23 bool ret=false; 24 if(recursive_delete(curNode->left)==false) 25 curNode->left=nullptr; 26 else 27 ret=true; 28 if(recursive_delete(curNode->right)==false) 29 curNode->right=nullptr; 30 else 31 ret=true; 32 if(curNode->val==1) 33 ret=true; 34 return ret; 35 } 36 };