102. 二叉树的层序遍历(队列+BFS+结构体)

题目描述

leetcode - 102:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/

解题关键

  • 队列
  • BFS
  • 结构体

碎碎念

这道题可以不用结构体,在while循环里面加一个for循环来遍历某一层的节点。但是很多宽搜的题一般节点需要存储一些别的信息,所以我写BFS基本都统一用结构体来做了。

代码

/**
 * 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:
    // 新定义一个结构体,存储节点的高度和节点
    struct FloorNode {
        TreeNode *node;
        int depth;
        FloorNode(int _depth, TreeNode* _node){
            depth = _depth;
            node = _node;
        }
    };
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> ans;
        if(root==NULL) return ans;

        queue<FloorNode> Q;

        Q.push(FloorNode(0,root));
        ans.push_back(vector<int>());

        int depth = 0;
        while(!Q.empty()){
            FloorNode tmp = Q.front();
            TreeNode* tmpNode = tmp.node;
            Q.pop();
            if(depth!=tmp.depth){
                ans.push_back(vector<int>());
                depth++;
            }
            ans[depth].push_back(tmpNode->val);
            if(tmpNode->left){
                Q.push(FloorNode(depth+1,tmpNode->left));
            }
            if(tmpNode->right){
                Q.push(FloorNode(depth+1,tmpNode->right));
            }
        }
        return ans;
    }
};

猜你喜欢

转载自www.cnblogs.com/baboon/p/13160722.html
今日推荐