[剑指Offer] 把二叉树打印成多行

问题描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

分析

方法一 层与层之间用NULL分隔

      5
    /   \
   3     7
  / \   / \
 2   4 6   8

队列中元素变化

5#
#37
37#
7#24
#2468
2468
vector<vector<int> > Print(TreeNode* pRoot) {
    vector<vector<int>> result;
    if (pRoot == NULL) return  result;

    queue<TreeNode*> q;
    q.push(pRoot);
    q.push(NULL);

    vector<int> v;

    while (!q.empty()) {
        TreeNode* tmp = q.front();
        q.pop();

        if (tmp == NULL) {
            result.push_back(v);
            v.clear();
        } else {
            v.push_back(tmp->val);
        }

        if (tmp && tmp->left) {
            q.push(tmp->left);
        }
        if (tmp && tmp->right) {
            q.push(tmp->right);
        }

        if(tmp == NULL && !q.empty()) { //队列为空后不再添加NULL
            q.push(NULL);
        }
    }

    return result;
}

方法二 统计每一层的元素个数

vector<vector<int> > Print(TreeNode* pRoot) {
    vector<vector<int>> result;
    if (!pRoot) return  result;

    queue<TreeNode*> q;
    q.push(pRoot);

    while (!q.empty()) {
        int count = q.size();
        vector<int> v;
        while (count--) {
            TreeNode* node = q.front();
            q.pop();

            v.push_back(node->val);

            if (node->left) q.push(node->left);
            if (node->right) q.push(node->right);
        }
        result.push_back(v);
    }

    return result;
}
posted @ 2020-05-29 10:54  arcsinW  阅读(139)  评论(0编辑  收藏  举报