[資料結構] BFS演算法實現層序遍歷輸出一顆二叉樹

Kroling0發表於2020-12-25

題目描述
給定一個二叉樹,返回該二叉樹層序遍歷的結果,(從左到右,一層一層地遍歷)
例如:
給定的二叉樹是{3,9,20,#,#,15,7},
在這裡插入圖片描述

該二叉樹層序遍歷的結果是
[
[3],
[9,20],
[15,7]
]

示例1
思路: 在資料結構中BFS遍歷序列和層序遍歷序列一致故可以用BFS演算法實現層序遍歷。基本思想是,先讓頭節點入隊,然後再其出隊之後將其左右孩子入隊,就是在每一個結點出隊時隨即讓其左右孩子入隊,這樣可以保證佇列中的元素個數總與該層的結點數一致。

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode類 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > levelOrder(TreeNode* root) {
        vector<vector<int>>res;
      if(!root)return res;//表示該樹為空樹
      queue<TreeNode*> q;
      q.push(root);
      while (!q.empty())
      {
          vector<int> cen;
          int size=q.size();//當前佇列元素個數代表該層元素個數
          while(size--)//按照輸出格式進行輸出
          {
              TreeNode*node=q.front();
              cen.push_back(node->val);
              q.pop();
              if(node->left)q.push(node->left);//讓出隊的結點的左右孩子入隊
              if(node->right)q.push(node->right);
          }
          if(cen.size()>0)res.push_back(cen);//如果該層有結點
      }
      return res;
    }
 };

相關文章