您的位置:首页 > 其它

JZ0047:二叉树剪支

2022-05-13 00:29 288 查看 https://www.cnblogs.com/d-book

title:二叉树剪支

📃 题目描述

题目链接:二叉树剪支相同题目

🔔 解题思路

第一种做法:dfs,思考方式是你站在一个点上怎么做,在一个点上,先看左子树是否要删除,再看看右子树,然后进行删除操作,最后看看自己是不是属于要删除的节点;

class Solution {
public:
TreeNode* pruneTree(TreeNode* root) {
return deleteNode(root) ? nullptr : root;
}

bool deleteNode(TreeNode* root) {
if (root == nullptr) return false;
bool leftDel = deleteNode(root->left);
bool rightDel = deleteNode(root->right);

if (leftDel) root->left = nullptr;
if (rightDel) root->right = nullptr;

// if (root->left == nullptr && root->right == nullptr && root->val == 0) return true;
// else return false;
//优化写法:
return root->val == 0 && !root->left && !root->right;
}
};

方法二:非递归方式实现,将数据压入栈中,每次拿出,判断这个节点的左孩子、右孩子是不是要删除,需要删除的就删除;

💥 复杂度分析

  • 时间复杂度:o(n);
  • 空间复杂度:O(n);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: