题解 | #求二叉树的层序遍历#

求二叉树的层序遍历

https://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3

class Solution {
public:
    //固定值
    const static int MAXSIZE =150;
    //返回值列表
    vector<vector<int > >vec;
    //层遍历值列表
    vector<int >cp;
    //指向每一层的元素的指针列表
    TreeNode* QUEUE[MAXSIZE];
    int Front = 0; //指向队列头的指针
    int Rare = 0;  //指向队列尾的指针
    int Length = 0;//队列元素长度计数器
    int p = 0;     //指向当层的最后一个元素
    vector<vector<int> > levelOrder(TreeNode* root) {
        if (root != nullptr) {
            //我们需要初始化我们的整个队列
            if (root->left != nullptr) {
                QUEUE[Rare] = root->left;
                Rare = (Rare + 1) % MAXSIZE;
                Length++;
            }
            if (root->right != nullptr) {
                QUEUE[Rare] = root->right;
                Rare = (Rare + 1) % MAXSIZE;
                Length++;
            }
            p = Rare - 1;
            //将根节点的值保存进入我们的层序列表中
            cp.push_back(root->val);
            vec.push_back(cp);
            cp.clear();//清空整个数组的垃圾数据

            while (Length != 0) {
                if (Front != p) {
                    if (QUEUE[Front]->left != nullptr) {
                        QUEUE[Rare] = QUEUE[Front]->left;
                        Rare = (Rare + 1) % MAXSIZE;
                        Length++;
                    }
                    if (QUEUE[Front]->right != nullptr) {
                        QUEUE[Rare] = QUEUE[Front]->right;
                        Rare = (Rare + 1) % MAXSIZE;
                        Length++;
                    }
                    //将该节点的值压入我们的数组中,并删除该结点
                    cp.push_back(QUEUE[Front]->val);
                    Front = (Front + 1) % MAXSIZE;
                    Length--;
                }
                else {
                    if (QUEUE[Front]->left != nullptr) {
                        QUEUE[Rare] = QUEUE[Front]->left;
                        Rare = (Rare + 1) % MAXSIZE;
                        Length++;
                    }
                    if (QUEUE[Front]->right != nullptr) {
                        QUEUE[Rare] = QUEUE[Front]->right;
                        Rare = (Rare + 1) % MAXSIZE;
                        Length++;
                    }
                    //将该节点的值压入我们的数组中
                    cp.push_back(QUEUE[Front]->val);
                    Front = (Front + 1) % MAXSIZE;
                    Length--;
                    vec.push_back(cp);
                    cp.clear();//清空整个数组
                    //更新新的指向该层最后一个元素的指针
                    p = Rare - 1;
                }
            }
        }
        return vec;
    }
};
全部评论

相关推荐

01-14 15:08
东南大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务