代码随想录算法训练营第十五天 |102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉树
102. 二叉树的层序遍历
题目链接:102. 二叉树的层序遍历
- 队列先进先出
- Java 的 Queue是由LinkedList实现的,不能用ArrayList
- 要记得变量len
- 注意一下C++的API, que.front(), push, pop
226. 翻转二叉树
题目链接:226. 翻转二叉树
-
有两种做法:遍历和分解做法
-
其中最好都用后序操作的方式。
- 如果在遍历时使用中序遍历,记得下一个遍历的节点应该是被交换后的节点
- 分解做法就是后在将要离开某个节点时改变其左子树和右子树指针
101. 对称二叉树
题目链接:101. 对称二叉树
- 和相同的树异曲同工
- 主要是要想出compare函数接受两个参数
-
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: bool isSymmetric(TreeNode* root) { if (root == NULL) return true; return compare(root->left, root->right); } bool compare(TreeNode* left, TreeNode* right){ if (left == NULL && right == NULL) return true; else if (left == NULL || right == NULL) return false; else if(left->val != right->val) return false; else { return compare(left->left, right->right) && compare(left->right, right->left); } } };