題目:請實現乙個函式按照之字形順序列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右到左的順序列印,第三層再按照從左到右列印,其他行以此類推。
例如:按之字形順序列印二叉樹的結果如下圖:
列印結果:
3,24,5,6,7
15,14,13,12,11,10,9,8
方案:利用兩個棧。時間複雜度o(n)+輔助空間2*o(n)。
具體方法:我們在列印某一結點時,把下一層的子結點儲存到相應的棧裡。如果當前列印的是奇數層(例如第一層,第三層...第2*n+1層),則先儲存左子結點再儲存右子結點到棧裡;如果當前列印的是偶數層(2*n),則先儲存右子結點再儲存左子結點。具體分析步驟如下:
具體實現**:
#include
#include
using namespace std;
struct binarytree
;binarytree *proot=null;
void createtree(binarytree *&root)
}void printzhi(binarytree *root)
else
if(level[current].empty()) }
int main()
{ createtree(proot);
cout<
執行結果:
3 15 劍指offer 按之字形順序列印二叉樹
請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。層序遍歷的高階 每行的節點的訪問順序是相反的,我們可以用兩個棧來隔行儲存,乙個棧中根據另乙個棧的棧頂元素的 左結點 右結點 的順序儲存節點,而另乙個棧根據另...
劍指offer 按之字形順序列印二叉樹
請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。我的解法是用兩個棧來列印,第乙個棧st1列印奇數層,第二個棧st2列印偶數層。先將根節點壓入st1,然後將st1中元素出棧並訪問元素,出棧的同時,將每個節點...
劍指offer 按之字形順序列印二叉樹
題目 劍指offer 按之字形順序列印二叉樹 這個題的本質是返回每一層的節點,關鍵是增加每一層的最右側節點作為標記。如果指標到達這個節點,那麼證明此時佇列裡面的都是下一層的節點。關鍵是為什麼不會有下下層的節點,因為現在訪問到last,最多生成下一層的節點,不會有下下層。所以,此時佇列中最後乙個節點就...