日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树经典题之将二叉树分层打印

發(fā)布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树经典题之将二叉树分层打印 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:

二叉樹刷題是有固定思維的,請移步

README】二叉樹刷題框架

文章目錄

  • 前言:
  • 二叉樹的層序遍歷
  • 思路一:兩個隊列
    • 分析:
    • 代碼
  • 思路二:變量控制

二叉樹的層序遍歷

題目

點擊跳轉(zhuǎn):LeetCode

思路一:兩個隊列

分析:

如果直接讓你層序遍歷,那么就很簡單,直接使用隊列即可,但是現(xiàn)在它不止要求你層序遍歷打印,而且還要求你同一層的要放在相同的一維vector里(C++中的數(shù)組),最終返回一個二維數(shù)組

思路一就是可以使用兩個隊列,queue_node隊列用來保存二叉樹的結(jié)點,queue_level用于標識某個結(jié)點屬于那一層,因此其類型為int
整個過程和咋們層序遍歷二叉樹時的那個邏輯基本相似,不過就多了一個隊列。比如下面這顆二叉樹

首先先入根節(jié)點,同時保存層數(shù)的那個隊列就入1,表示根節(jié)點處于第一層

然后出結(jié)點10,同時也出結(jié)點1,將其加入到結(jié)果中。出結(jié)點10的時候,再把9,8入隊列,同時9,8由于是第二層,因為在queue_level中入兩次2。

剩下的過程就是重復。

代碼

雖然思路較為簡單,但是代碼還是有很多值得注意的地方,重點均標記在代碼中

class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> ret;if(root==nullptr)//特判,空樹直接返回return ret;vector<int> sub_ret;//二維數(shù)組中的一維數(shù)組queue<TreeNode*> queue_node;//保存結(jié)點的隊列queue<int> queue_level;//保存結(jié)點的層數(shù)的隊列int level=1;//變量level表示層數(shù),默認從第一層開始TreeNode* temp;//中間變量temp,用接收從隊列中彈出的結(jié)點queue_node.push(root);//首先將根節(jié)點加入queue_level.push(level);//根節(jié)點肯定屬于第一層while(!queue_node.empty())//隊列不空,就不斷出隊列{level=queue_level.front();//每結(jié)束第二個while循環(huán),表示一層的已經(jīng)搞完了,使用level更新此時的最新的層數(shù)while(level==queue_level.front())//把位于相同層的結(jié)點全部加入到sub_ret數(shù)組中{temp=queue_node.front();queue_node.pop();if(temp->left!=nullptr)//不要忘記每出一個結(jié)點就要把它的孩子幾點給代入進來,先進左孩子,再進右孩子{queue_node.push(temp->left);queue_level.push(level+1);//進入一個孩子,這個孩子就是下一層了,所以要level+1}if(temp->right!=nullptr){queue_node.push(temp->right);queue_level.push(level+1);}sub_ret.push_back(temp->val);//將同一層的結(jié)點全部加入到sub_ret中queue_level.pop();//queue_level也要記得出隊列}ret.push_back(sub_ret);//內(nèi)部while循環(huán)結(jié)束后,同一層的就完了,所以保存一層結(jié)果到ret中sub_ret.clear();//注意清空這個sub_ret,因為要重復利用到}return ret;} };

思路二:變量控制

我們知道,在父節(jié)點出隊列的時候,會把它的孩子帶入到隊列中,也就是隊列的size本身保存的就是當前層的結(jié)點的個數(shù),所以我們可以通過一個變量level去控制,讓其一層一層的出。

class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> vv;if(root==nullptr)return vv;queue<TreeNode*> queue_node;queue_node.push(root);while(!queue_node.empty()){int level=queue_node.size();//一層一層的出,level保存的就是當前層的所有結(jié)點的個數(shù)vector<int> v;while(level--){TreeNode* temp=queue_node.front();//出一個結(jié)點就把他的孩子結(jié)點帶入進去queue_node.pop();v.push_back(temp->val);//同一層結(jié)點放進同一個一維數(shù)組中if(temp->left)queue_node.push(temp->left);if(temp->right)queue_node.push(temp->right);}vv.push_back(v);//一層完畢加入一個結(jié)果}return vv;} };

總結(jié)

以上是生活随笔為你收集整理的二叉树经典题之将二叉树分层打印的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 福利视频免费观看 | a视频免费在线观看 | 精品人体无码一区二区三区 | 国产亚洲天堂网 | 久久xxxx| 国语对白清晰刺激对白 | 天堂免费av | 成人app在线 | 一区二区三区高清在线观看 | 11孩岁女毛片| 欧美激情第五页 | 大白屁股一区二区视频 | 亚洲综合日韩精品欧美综合区 | 国产在线超碰 | 美女扒开尿口给男人看 | 色花堂在线 | 国产一区二区三区网站 | 国产三级精品在线 | 丝袜美女av | 欧美xxxxav | 国产美女视频网站 | 人妻少妇精品中文字幕av蜜桃 | 欧美性做爰毛片 | 97自拍视频 | 潘金莲激情呻吟欲求不满视频 | 青青超碰 | 亚洲欧洲自拍偷拍 | 欧美性猛交xxx乱久交 | 精品国产精品三级精品av网址 | 麻豆精品一区 | 97av在线| 美女激情av | 777精品久无码人妻蜜桃 | 一级做a免费视频 | 欧美日韩午夜激情 | 免费精品视频一区二区三区 | 琪琪原网址 | 69xxxx国产| 免费看爱爱视频 | 日韩中文一区二区 | 久久综合一区二区 | 日韩一区二区三区在线 | 久久婷婷激情 | 高清av网站 | 欧美xxxxxx片免费播放软件 | 欧美午夜小视频 | 免费91网站 | 中文字幕亚洲乱码熟女1区2区 | 国产精品福利小视频 | 久久精品欧美视频 | 九九热国产在线 | 亚洲码无人客一区二区三区 | 欧美日韩一二三四 | 欧美性生活一区二区三区 | 日韩在观看线 | 国产乱xxⅹxx国语对白 | 久久久欧美 | 无码国产色欲xxxx视频 | 波多野结衣三区 | 国产精品一级二级 | 国产午夜精品无码一区二区 | 人人澡人人看 | 五月激情婷婷网 | 91美女诱惑| 日韩欧美三级 | 好爽快一点高潮了 | 日本免费在线视频 | 五月深爱| 色天使在线视频 | 少妇欧美激情一区二区三区 | 欧美激情在线狂野欧美精品 | 午夜精品三级久久久有码 | 一区二区日本视频 | 91亚洲天堂| 亚洲福利网址 | 最好看的2019年中文视频 | 日韩av无码一区二区三区不卡 | 3p视频在线观看 | 蜜臀久久99静品久久久久久 | 婷婷伊人久久 | 精品少妇爆乳无码av无码专区 | 亚洲一卡二卡 | 久久av一区二区三区亚洲 | 久久五月天婷婷 | 福利一区在线观看 | 综合在线视频 | 亚洲高清在线视频 | 韩国三级与黑人 | 国产做受高潮 | 91国产免费观看 | wwwxxx日韩 | 精品人妻无码一区二区三区蜜桃一 | 三年大全国语中文版免费播放 | 狠狠操你 | 自拍第1页 | 中文字幕在线观看三区 | 日本黄色xxx| 91色视频| 亚洲精品久久久久久无码色欲四季 |