当前位置: 首页 > web >正文

代码随想录刷题Day34

翻转二叉树

递归思路抽象出这个翻转的过程:先是对左右子树翻转,接着再交换左右孩子节点的位置:

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(!root) return root;else{invertTree(root->left);invertTree(root->right);TreeNode* tmp = root->left;root ->left = root -> right;root->right = tmp;return root;}}
};

对称二叉树

这个题目花了比较多时间思考和写,想过几种方案,都没能写出来,最后还得再看代码随想录的标准答案,才恍然大悟,原来也可以用递归的思路来解决。

首先,我自己最开始的思路,是基于上一题的翻转二叉树,我想的是,对要判断是否对称的二叉树root来一个翻转操作得到一棵新树root_invert,接着比较root和invert_root时候一致,如果一致,说明root本身就是对称的,否者说明root不是对称的。但是代码思想这个思路之后,在比较两棵树的时候,一直有bug出现,应该是细节不太对,卡了比较久,还是放弃了这条思路。

接着是粗略参考代码随想录的标准答案,看到可以用后序遍历+递归的思路,于是我还没想清楚就直接写代码,写代码是对左子树进行左右中的后序遍历,对右子树进行右左中的后序遍历,然后对得到的左子树的遍历序列和右子树的遍历序列进行比较,如果不一致则说明不是对称的,但是这样的做法,显然是没有考虑到题目给出的第二个样例的情况。对于分别只有一个孩子的左右子树,如果左子树存在的是右孩子,右子树存在的也是右孩子,如果值还一样,这在这样的思路下会得出这对节点是对称的误判结果。

最后,还是得认真参考官方题解,定义一个比较函数,用于比较左右两棵子树是否对称,具体的比较过程,先是左右子树根节点是否一致,接着是对子树的外侧和内侧接节点的比较,如此迭代下去。

class Solution {
public:bool compare(TreeNode* left,TreeNode* right){//比较左右孩子节点if(left == nullptr && right!= nullptr) return false;else if(left !=nullptr && right == nullptr) return false;else if(left ==nullptr && right ==nullptr) return true;else if(left->val != right->val) return false;//左右子树的内外侧比较bool outside = compare(left->left,right->right);bool inside = compare(left->right,right->left);return outside && inside;}bool isSymmetric(TreeNode* root) {return compare(root->left,root->right);}
};

做这两道题,感觉做对普通二叉树的一些性质的判断或者操作,可以优先考虑使用递归的思路,而想要用递归,得先找到递归的规律。

http://www.xdnf.cn/news/18165.html

相关文章:

  • 分治-归并-315.计算右侧小于当前元素的个数-力扣(LeetCode)
  • 42 C++ STL模板库11-容器4-forward_list
  • macos 安装nodepad++ (教程+安装包+报错后的解决方法)
  • 深入解析函数指针及其数组、typedef关键字应用技巧
  • HAL-EXTI配置
  • Linux | i.MX6ULL网络通信-套字节 UDP(第十八章)
  • 【OpenGL】LearnOpenGL学习笔记11 - 多光源
  • Linux入门指南:基础开发工具---vim
  • mysql建库规范
  • 《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
  • 基于Vue + Node能源采购系统的设计与实现/基于express的能源管理系统#node.js
  • 数据结构与算法:线段树(一):基本原理
  • 【Python练习】097. 编写一个函数,实现简单的版本控制工具
  • 机器人经验学习1 杂记
  • 牛客周赛 Round 105
  • Vue 与 React 深度对比:设计哲学、技术差异与应用场景
  • 深度学习·GFSS
  • 基于RK3588的微电网协调控制器:实现分布式能源的智能调控与优化运行
  • JavaScirpt高级程序设计第三版学习查漏补缺(1)
  • MysqL(二:sqL调优)
  • 《若依》介绍和环境搭建
  • 低空经济产业链全景解析
  • 软考 系统架构设计师系列知识点之杂项集萃(125)
  • MySQL性能优化:10个关键参数调整指南
  • 基于STM32的精确按键时长测量系统
  • 无痕HOOK 检测及对抗
  • Altium Designer 22使用笔记(7)---网表导入,叠层设置
  • 解密红外温度芯片的“工作环境温度” 范围
  • 在openEuler24.03 LTS上高效部署Apache2服务的完整指南
  • CPP多线程1:C++11的std::thread