D13|leetcode 102、leetcode 226、LeetCode 101

LeetCode 102. 二叉树的层序遍历

思路:

这道题的难点在于当遍历完某一层之后,下一层的元素是上一层元素的子节点,需要记录上一层的遍历情况。这种情况可以使用队列以及一个记录每层数量的变量来解决。让每层的节点先进入队列,在弹出的时候让它的左右节点加入队列,因为此时队列中包含有两层的元素,所以用记录每层数量的变量来解决弹出的个数。

代码:

/**

* 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:

    vector<vector<int>> levelOrder(TreeNode* root) {

    queue<TreeNode*> que;

    if(root!=NULL) que.push(root);

    vector<vector<int>> res;

    while(!que.empty())

    {

        int size=que.size();

        vector<int> temp;

        while(size--)

        {

            TreeNode* node=que.front();

            que.pop();

            temp.push_back(node->val);

            if(node->left!=NULL) que.push(node->left);

            if(node->right!=NULL) que.push(node->right);

        }

        res.push_back(temp);

    }

    return res;

    }

};


LeetCode 226.翻转二叉树

思路:

这里的翻转是指针的翻转,不是数值的交换,所以只用对每一个小的二叉树进行左右交换就行。

代码:

(递归版)
/**

* 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:

    TreeNode* invertTree(TreeNode* root) {

        if(root==NULL) return root;

        swap(root->left,root->right);

        invertTree(root->left);

        invertTree(root->right);

        return root;

    }

};


LeetCode 101. 对称二叉树

思路:

这道题相当于是比较左子树能不能翻转成右子树,所以采用递归法比较左子树和右子树对应位置是否相互相等

代码:

/**

* 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 equal(TreeNode* left,TreeNode* right)

    {

        if(left==NULL && right!=NULL) return false;

        else if(left!=NULL && right==NULL) return false;

        else if (left==NULL && right==NULL) return true;

        else if(left->val!=right->val) return false;

        bool in=equal(left->right,right->left);

        bool out=equal(left->left,right->right); 

        bool result=in&out;

        return result;

    }

    bool isSymmetric(TreeNode* root) {

        bool res=equal(root->left,root->right);

        return res;

    }

};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 二叉树的问题,一定要明白到底应该深度优先(前中后序)还是广度优先(层序遍历) 最基本的遍历方式:深度优先和广度优先...
    金色888阅读 250评论 0 0
  • 一、递归法遍历二叉树 步骤: 1、确定递归函数的参数和返回值; 2、确定终止条件; 3、确定单层递归的逻辑 例题:...
    skak阅读 95评论 0 0
  • 技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1....
    CurryCoder阅读 1,891评论 0 2
  • ● 如何打印二叉树每层的节点? 考察点:二叉树 参考回答: 实现代码: import java.util.Arra...
    le_u阅读 510评论 0 0
  • 序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后...
    雪上霜阅读 186评论 0 0