日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

剑指offer:分行从上往下打印二叉树

發(fā)布時間:2025/4/5 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指offer:分行从上往下打印二叉树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

      • 分析
      • 題目來源

分析

思路:
在原來bfs的基礎(chǔ)上,每一層結(jié)束時做一個標記nullptr,每當掃描到這個標記時,就將當前隊列中元素存入vector中,并清空中間vector,進入下一層。

這里加標記需要注意的是,當遍歷到最后一層時,不用加標記。遍歷完最后一層時,queue為空,所以這句代碼這樣寫:if (q.size()) q.push(nullptr);// q不空再加標簽nullptr

時間復(fù)雜度:O(n),每個元素遍歷一遍
ac代碼

/*** 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>> printFromTopToBottom(TreeNode* root) {vector<vector<int>> res;if (root == nullptr) return res;queue<TreeNode*> q;q.push(root);q.push(nullptr);vector<int> level;while (q.size()) {auto t = q.front();q.pop();// 正常bfsif(t != nullptr) {level.push_back(t->val);if (t->left) q.push(t->left);if (t->right) q.push(t->right);}// 遇到標記else {res.push_back(level); // 一行存入vector中level.clear();// 這里之所以要判斷一下queue不空// 是因為bfs遍歷每一層,都會把下一層結(jié)點壓入隊列中// 如果隊列為空,則說明已經(jīng)是最后一層,無需再加標記if (q.size()) q.push(nullptr);}}return res;} };

題目來源

https://www.acwing.com/problem/content/42/

總結(jié)

以上是生活随笔為你收集整理的剑指offer:分行从上往下打印二叉树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。