JZ0047:二叉树剪支
2022-05-13 00:29
676 查看
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);
相关文章推荐
- 二叉树的最大节点-LintCode
- 二叉树的存储结构
- 剑指Offer--把二叉树打印成多行
- 二叉树的遍历
- 二叉树的建立、销毁、各种遍历(递归、非递归)
- 二叉树的建立
- 23 从上往下打印二叉树
- 二叉树的创建与遍历(递归和非递归)
- 二叉树的最大深度
- 二叉树的遍历
- 第十周-二叉树的层次遍历算法
- 二叉树学习笔记
- 根据前序和中序遍历结果重建二叉树
- 数据结构--创建二叉树
- 二叉树周游
- 二叉树的最小深度-LintCode
- [LintCode]175.翻转二叉树
- 项目2--用二叉树求解代数表达式
- 二叉树,完全二叉树,满二叉树,二叉排序树,平衡二叉树,红黑树,B数,B-树,B+树,B*树(二)
- 求二叉树中某结点在层序序列中的编号