二叉樹之層次遍歷

2021-07-30 19:54:59 字數 1281 閱讀 6564

題目:

給出一棵二叉樹,返回其節點值的層次遍歷(逐層從左往右訪問)

您在真實的面試中是否遇到過這個題?

yes

樣例給一棵二叉樹

3

/ \9 20

/ \

15 7

返回他的分層遍歷結果:

[

[3],

[9,20],

[15,7]

]

思路:使用佇列aqueue,一開始先把根節點插進去,定義i=1,j=0,當aqueue不為空時,提取出來佇列頭結點並刪掉頭結點,如果這個結點為空,i++,不為空,則把值插入到ss中,並且將左右結點插入到aqueue,接下來如果i等於ss中資料個數加j,也就是這一層已經遍歷完了,就把ss插入到aa中去,清空ss,i=i*2,j=j*2,。最後返回aa。

**:/**

* definition of treenode:

* class treenode

* }*/

class solution

else

if(i==(ss.size()+j)&&ss.size()!=0)

}return aa;}};

/*queuebqueue;

treenode *pointer=root;

if(pointer)

bqueue.push(pointer);

while(!bqueue.empty())

aa.push_back(ss);

}return aa;*/

/*treenode *pointer=root;

if(pointer)

aqueue.push(pointer);

while(1)

aqueue.pop();

if(pointer->left)

aqueue.push(pointer->left);

if(pointer->right)

aqueue.push(pointer->right);

}aa.push_back(ss);

if(aqueue.empty()&&ss.size()!=1)

}return aa;

}};*/

感想:一開始想著使用兩個佇列做,就省去了i和j的判斷等,但是記憶體超限制了,於是又修改了一下,不用倆個佇列了,但還是記憶體超限制了,最後不得已用了這個演算法,過了。感覺以後應該以最優為目標,而不是以省事為目標。

層次遍歷二叉樹

問題 假定根節點位於第0層 1.層次遍歷二叉樹 每層換行分開 2.層次遍歷二叉樹指定的某層 本文 例如 上圖中1.123 4567 82.第三層 78可以看出得出第二問的解,第一問迎刃而解了,所以從問題二下手 1.層次遍歷二叉樹指定的某層 可以得出這樣的乙個結論 遍歷二叉樹的第k層,相當於遍歷二叉樹...

二叉樹層次遍歷

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。思路 二叉樹的層次遍歷,利用棧的先進後出的特性。struct treenode class solution res.push back temp while m.empty m中是從左往右入棧,這裡把它反過來,s中是從右往左...

二叉樹層次遍歷

層次遍歷二叉樹,每一次儲存在list中,結果按從葉子層到根,從左到右的順序儲存 一 class solution return lists 相當於在先序的基礎上改進,level是每個node所在的層次。如果lists大小和level相等,說明開始新一層的儲存。如果不等,則直接把值存入相應層次的lis...