leetcode 814 二叉树剪枝
一、题目描述
二、解题思路
整体思路
可以采用递归的方法来实现这个问题。
具体思路
函数功能:
pruneTree函数用于删除以root为根节点的不包含1的子树,返回root根节点,如果以root为根节点的树全为0,则返回nullptr:
递归出口:
当root为空节点时,返回nullptr;
函数体:
(1)处理左子树,将root->left更新为函数处理的结果,即root->left=pruneTree(root->left);
(2)处理右子树,将root->right更新为函数处理的结果,即root->right=pruneTree(root->right);
(3)处理根节点:
<1>如果root的左右子树均为空且root->val==0,就把root剪枝,即将root赋值为nullptr,进行返回;
<2>如果root为根节点的树无需剪枝,则直接返回root;
三、代码实现
/*** 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==nullptr) return nullptr;//处理左子树root->left=pruneTree(root->left);//处理右子树root->right=pruneTree(root->right);//处理根节点if(root->left==nullptr&&root->right==nullptr&&root->val==0)root=nullptr;return root;}
};