代码随想录算法训练营第十五天 |102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉树

70 阅读1分钟

代码随想录算法训练营第十五天 |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);
             }
         }
     };