Leetcode--从上到下打印二叉树 II(广度优先遍历法)

题目链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/ 

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

提示:

  1. 节点总数 <= 1000

思路

使用广度优先算法,在队列中插入NULL空值来区分每一层的节点 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
  
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> vec;
        if(root== NULL)
            return vec;
        queue<TreeNode*> qu;

        qu.push(root);
        qu.push(NULL);
        vector<int> v;
        while(!qu.empty()){
            TreeNode* temp_node= qu.front();
            qu.pop();
            if(temp_node== NULL&&qu.size()== 0){//到达了前一层的尾部并且队列中没有节点说明树已经遍历完了
                vec.push_back(v);
                break;
            }
            else if(temp_node== NULL){//空值说明到了前一层的尾部开始遍历这层,插入空值标志该层结尾
                qu.push(NULL);
                vec.push_back(v);
                v.clear();
                continue;
            }

            v.push_back(temp_node->val);
            if(temp_node->left!= NULL)
                qu.push(temp_node->left);            
            if(temp_node->right!= NULL)
                qu.push(temp_node->right);
            
        }

        return vec;
    }
};
发布了184 篇原创文章 · 获赞 25 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_41879093/article/details/104470213