栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

力扣剑指offer32—从上到下打印二叉树

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

力扣剑指offer32—从上到下打印二叉树

        这三个题目大致上都相同,I的做法最简单,II是在I的基础上做了相当于换行的操作,III在II的基础上对偶数行的元素进行了反转

剑指offer32-I、从上到下打印二叉树

class Solution {
public:
    vector levelOrder(TreeNode* root) {
        if(root==nullptr)return {};//判空
        queueque;//层次遍历属于广度优先搜索,用队列来存储
        que.push(root);//将根结点放入队列
        vector vec;
        while(!que.empty()){//当队列不为空,弹出队首元素,并且,将该元素插入数组
            TreeNode *res=que.front();//res节点指向队列第一个元素
            que.pop();
            vec.push_back(res->val);
            if(res->left){//如果当前节点有左孩子,左孩子入队
                que.push(res->left);
            }
            if(res->right){//如果当前节点有右孩子,右孩子入队
                que.push(res->right);
            }
        }
        return vec;
    }
};

剑指offer32-II、从上到下打印二叉树

class Solution {
public:
    vector> levelOrder(TreeNode* root) {
        if(root==nullptr)return {};
        vector>vec;
        queueque;
        TreeNode *last=root;//标记二叉树当前行的最后一个节点
        TreeNode *nlast=nullptr;//下一行的最后一个节点
        que.push(root);
        int i=0;
        vec.push_back({});//二维数组新增一行
        while(!que.empty()){
            TreeNode *res=que.front();
            que.pop();
            vec[i].push_back(res->val);
            if(res->left){
                que.push(res->left);
                nlast=res->left;
            }
            if(res->right){
                que.push(res->right);
                nlast=res->right;
            }
            if(res==last){
                last=nlast;//
                vec.push_back({});//每到二叉树最后一个元素之后就给二维数组添加一行
                i++;//用i做标记,数组元素要添加到vec[i]行
            }
        }
        vec.pop_back();//删除二维数组中最后多加的一行一维数组
        return vec;
    }
};

 剑指offer32-III、从上到下打印二叉树

class Solution {
public:
    vector> levelOrder(TreeNode* root) {
        if(root==nullptr)return {};
        vector>vec;
        queueque;
        TreeNode *last=root;//标记二叉树当前行的最后一个节点
        TreeNode *nlast=nullptr;//下一行的最后一个节点
        que.push(root);
        int i=0;
        vec.push_back({});//二维数组新增一行
        while(!que.empty()){
            TreeNode *res=que.front();
            que.pop();
            vec[i].push_back(res->val);
            if(res->left){
                que.push(res->left);
                nlast=res->left;
            }
            if(res->right){
                que.push(res->right);
                nlast=res->right;
            }
            if(res==last){
                if(i%2!=0){//i为奇数时当前行需要被翻转
                    reverse(vec[i].begin(),vec[i].end());
                }
                last=nlast;
                vec.push_back({});//每到二叉树最后一个元素之后就给二维数组添加一行
                i++;//用i做标记,数组元素要添加到vec[i]行
            }
        }
        vec.pop_back();//删除二维数组中最后多加的一行一维数组
        return vec;
    }
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/695568.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号