当前位置:   article > 正文

代码随想录第十五天层序遍历226.翻转二叉树101. 对称二叉树

代码随想录第十五天层序遍历226.翻转二叉树101. 对称二叉树

题目链接102. 二叉树的层序遍历 - 力扣(LeetCode)
讲解链接代码随想录 (programmercarl.com)

相比于灵活的递归方法,二叉树的层序遍历就相对有些麻烦但直接,

直接定义队,将每一层的数据先塞入队中,

  1. ueue<TreeNode*>que;
  2. if(root!=NULL)que.push(root);

每一层根据当层上一层有多少元素进行统计:

  1. for (int i = 0; i < size; i++) {
  2. TreeNode* node = que.front();
  3. que.pop();
  4. vec.push_back(node->val);
  5. if(node->left)que.push(node->left);
  6. if(node->right)que.push(node->right);
  7. }

并实现下一层的推进。

题目链接226. 翻转二叉树 - 力扣(LeetCode)

讲解链接 代码随想录 (programmercarl.com)

 翻转二叉树相对简单,但只是代码形式上看着简单:

  1. TreeNode* invertTree(TreeNode* root) {
  2. if(root==NULL)return root;
  3. swap(root->left,root->right);
  4. invertTree(root->left);
  5. invertTree(root->right);
  6. return root;
  7. }

但是其中的思路其实没那么容易想起来,尤其重要的是递归的三部曲:

  1. 确定递归函数的参数和返回值
  2. 确定终止条件
  3. 确定单层递归的逻

这道题是相对典型的一道递归思想题目。

题目链接 101. 对称二叉树 - 力扣(LeetCode)

讲解链接 代码随想录 (programmercarl.com)

 本体也是在递归的基础上对于二叉树性质的考察,需要注意的是递归三部曲中的确定终止条件:

  1. bool compare(TreeNode* left,TreeNode* right){
  2. if(left==NULL&&right!=NULL)return false;
  3. else if(left!=NULL&&right==NULL)return false;
  4. else if(left->val!=right->val)return false;
  5. else if(left==NULL&&right==NULL)return true;
  6. bool inside=compare(left->right,right->left);
  7. bool outside=compare(left->left,right->right);
  8. bool isSame = outside && inside;
  9. return isSame;
  10. }

在编写终止条件时,不仅需要谨慎还有对于逻辑的考量。

上一段代码的

  1. else if(left->val!=right->val)return false;
  2. else if(left==NULL&&right==NULL)return true;

这一段就因为顺序反过来了导致循环报错,要先将可能出现空指针的情况都考虑清楚才能进项接下来的判断。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/674551
推荐阅读
相关标签
  

闽ICP备14008679号