LeetCode 814. 二叉树剪枝
题目描述
给你二叉树的根结点 root ,此外树的每个结点的值要么是 0 ,要么是 1 。
返回移除了所有不包含 1 的子树的原二叉树。
节点 node 的子树为 node 本身加上所有 node 的后代。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-tree-pruning
思路
一开始没啥思路,感觉要写搜索,后来想起来数据结构期末考好像有类似的,应该是用递归很容易写,然后确实很容易写,找准递归边界就好了,也确实很容易找。
代码
/**
* 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:
TreeNode* pruneTree(TreeNode* root)
{
if(!root)
{
return nullptr;
}
root->left = pruneTree(root->left);
root->right = pruneTree(root->right);
if(!root->left&&!root->right&&root->val==0)
return nullptr;
return root;
}
};
收获
- 看了题解和一些讨论,主流做法就是递归和搜索,这道题提示我如果我现阶段遇到有关树的题目,优先考虑递归去写。