首页 > 其他分享 >代码随想录 Day15 LeetCode102. 二叉树的层序遍历

代码随想录 Day15 LeetCode102. 二叉树的层序遍历

时间:2023-01-11 16:46:06浏览次数:68  
标签:right 层序 随想录 push qe 二叉树 front root left

102. 二叉树的层序遍历

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>>result;
        queue<TreeNode*>qe;
        if(root!=nullptr)qe.push(root);
        while(!qe.empty()){
            int size=qe.size();
            vector<int>temp;
            for(int i=0;i<size;i++){
                temp.push_back(qe.front()->val);
                if(qe.front()->left)qe.push(qe.front()->left);
                if(qe.front()->right)qe.push(qe.front()->right);
                qe.pop();
            }
            result.push_back(temp);
        }
        return result;
    }
};

107. 二叉树的层序遍历 II

class Solution {
public:
    vector<vector<int>> levelOrderBottom(TreeNode* root) {
        vector<vector<int>>result;
        queue<TreeNode*>qe;
        if(root!=NULL)qe.push(root);
        while(!qe.empty()){
            int size=qe.size();
            vector<int>temp;
            for(int i=0;i<size;i++){
                temp.push_back(qe.front()->val);
                if(qe.front()->left)qe.push(qe.front()->left);
                if(qe.front()->right)qe.push(qe.front()->right);
                qe.pop();
            }
            result.push_back(temp);
            
        }
        reverse(result.begin(),result.end());
        return result;
    }
};

199. 二叉树的右视图

class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        vector<int>result;
        queue<TreeNode* >qe;
        if(root!=nullptr)qe.push(root),result.push_back(qe.front()->val);
        while(!qe.empty()){
            int size=qe.size();
            for(int i=0;i<size;i++){
                if(qe.front()->right)qe.push(qe.front()->right);
                if(qe.front()->left) qe.push(qe.front()->left);
                qe.pop();
            }
            if(!qe.empty())result.push_back(qe.front()->val);
        }
        return result;
    }
};

226. 翻转二叉树

层序遍历做法

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        queue<TreeNode* >qe;
        if(root!=nullptr)qe.push(root);
        while(!qe.empty()){
            int size=qe.size();
            for(int i=0;i<size;i++){
                if(qe.front()->right)qe.push(qe.front()->right);
                if(qe.front()->left) qe.push(qe.front()->left);
                TreeNode* temp=qe.front()->left;
                qe.front()->left=qe.front()->right;
                qe.front()->right=temp;
                qe.pop();
            }
        }
        return root;
    }
};

前序遍历(递归)做法

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root==nullptr)return root;
        TreeNode* temp=root->left;
        root->left=root->right;
        root->right=temp;
        invertTree(root->left);
        invertTree(root->right);
        return root;
    }
};

101. 对称二叉树

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        queue<TreeNode* >qe;
        if(root!=nullptr)qe.push(root);
        while(!qe.empty()){
            vector<int>result;
            int size=qe.size();
            for(int i=0;i<size;i++){
                if(qe.front()->left) qe.push(qe.front()->left),result.push_back(qe.front()->left->val);
                else result.push_back(101);
                if(qe.front()->right)qe.push(qe.front()->right),result.push_back(qe.front()->right->val);
                else result.push_back(101);
                qe.pop();
            }
            vector<int>result1(result);
            reverse(result.begin(),result.end());
            if(result1!=result)return 0;
        }
        return 1;
    }
};

后序遍历做法(递归)。

从根的左右子树进入,分为左右中,右左中两只遍历方式,分外侧和内侧比较

class Solution {
public:
    bool compare(TreeNode* left,TreeNode* right){
        if(left==NULL&&right==NULL)return 1;
        else if(left==NULL&&right!=NULL)return 0;
        else if(left!=NULL&&right==NULL)return 0;
        else if(left->val!=right->val)return 0;
        bool outside= compare(left->left,right->right);
        bool isside= compare(left->right,right->left);
        bool isSame= outside&&isside;
        return isSame;
    }
    bool isSymmetric(TreeNode* root) {
        if(root==NULL)return 1;
        return compare(root->left,root->right);
    }
};

 

标签:right,层序,随想录,push,qe,二叉树,front,root,left
From: https://www.cnblogs.com/zhishikele/p/17044196.html

相关文章

  • 【BFS】LeetCode 103. 二叉树的锯齿形层序遍历
    题目链接103.二叉树的锯齿形层序遍历思路1额外加一个栈来使得访问节点的顺序是逆序的代码1classSolution{publicList<List<Integer>>zigzagLevelOrder(Tree......
  • 输出二叉树的右视图
    题目要求题目链接思路分析方法一:刚开始做的时候没有什么思路,就采用了最笨的方法根据中序和先序求出二叉树得到层序遍历的结果得到每一层的最后一个元素方法比较笨......
  • 543. 二叉树的直径
    题目给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。注意:两结点之间的路径长度......
  • 算法刷题 Day 14 | 二叉树的递归遍历
    今日内容:理论基础递归遍历迭代遍历统一迭代详细布置理论基础需要了解二叉树的种类,存储方式,遍历方式以及二叉树的定义文章讲解:https://programm......
  • 重建二叉树
    题目描述思路分析在中序遍历列表中找到先序遍历列表中第一个节点,以此为界限可以将二叉树分为左右子树,可以得知左子树和右子树的长度,在先序遍历列表中划分出来。再依次拿......
  • 二叉树
    1.二叉树的概念二叉树是n个有限元素的集合,该集合或为空、或由一个根节点及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为......
  • 代码随想录day14 LeetCode 144.二叉树的前序遍历 145.二叉树的后序遍历 94.二叉树的中
    144.二叉树的前序遍历classSolution{public:vector<int>v;vector<int>preorderTraversal(TreeNode*root){if(root==NULL)returnv;......
  • 代码随想录算法训练营第14天
    今日开始二叉树部分,先看了理论基础,刷题3道:递归遍历,迭代遍历, 统一迭代。● 递归遍历题目链接/文章讲解/视频讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89......
  • 力扣102 二叉树的层序遍历(广度优先搜索)
    题目:给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]思......
  • 力扣226 翻转二叉树
    题目:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1] ......