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 };

 

posted @ 2020-07-24 20:37  __rookie  阅读(103)  评论(0编辑  收藏  举报