赞
踩
题目链接102. 二叉树的层序遍历 - 力扣(LeetCode)
讲解链接代码随想录 (programmercarl.com)
相比于灵活的递归方法,二叉树的层序遍历就相对有些麻烦但直接,
直接定义队,将每一层的数据先塞入队中,
- ueue<TreeNode*>que;
- if(root!=NULL)que.push(root);
每一层根据当层上一层有多少元素进行统计:
- for (int i = 0; i < size; i++) {
- TreeNode* node = que.front();
- que.pop();
- vec.push_back(node->val);
-
- if(node->left)que.push(node->left);
- if(node->right)que.push(node->right);
-
- }
并实现下一层的推进。
翻转二叉树相对简单,但只是代码形式上看着简单:
- TreeNode* invertTree(TreeNode* root) {
- if(root==NULL)return root;
- swap(root->left,root->right);
- invertTree(root->left);
- invertTree(root->right);
- return root;
-
- }
但是其中的思路其实没那么容易想起来,尤其重要的是递归的三部曲:
这道题是相对典型的一道递归思想题目。
本体也是在递归的基础上对于二叉树性质的考察,需要注意的是递归三部曲中的确定终止条件:
- bool compare(TreeNode* left,TreeNode* right){
- if(left==NULL&&right!=NULL)return false;
- else if(left!=NULL&&right==NULL)return false;
- else if(left->val!=right->val)return false;
- else if(left==NULL&&right==NULL)return true;
-
-
- bool inside=compare(left->right,right->left);
- bool outside=compare(left->left,right->right);
- bool isSame = outside && inside;
- return isSame;
- }
在编写终止条件时,不仅需要谨慎还有对于逻辑的考量。
上一段代码的
- else if(left->val!=right->val)return false;
- else if(left==NULL&&right==NULL)return true;
这一段就因为顺序反过来了导致循环报错,要先将可能出现空指针的情况都考虑清楚才能进项接下来的判断。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。