劍指Offer 從上到下列印二叉樹

2021-10-02 16:52:48 字數 3631 閱讀 8191

2. 題目 2

3. 題目 3

不分行從上到下列印二叉樹。從上到下列印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。

輸入:

8

/ \ 6

10/ \ / \ 57

911

輸出:

8610

57911

這個其實就是層序遍歷。每次列印乙個結點的時候,若該結點有子結點,則讓該結點的子結點放到乙個佇列的末尾。接下來到佇列的首部取出最早進入佇列的結點,不斷重複前面的列印,直至佇列中所有的結點都被列印出來。

#include

#include

#include

struct bitnode };

class solution

// 輔助容器:佇列

std:

:queue> qeuetreenode;

// 根結點入隊

qeuetreenode.

push

(root)

;// 遍歷佇列

while

(!qeuetreenode.

empty()

)if(node->right != nullptr)

// 根結點出隊

qeuetreenode.

pop();

}return result;}}

;// 銷毀二叉樹

void

destroybitree

(bitnode* root)

destroybitree

(root->left)

;destroybitree

(root->right)

;// 從最左依次 delete 至根結點

delete root;

root = nullptr;

}int

main

(void)}

// 遍歷vector,列印結果

// for (unsigned int i = 0; i < res.size(); ++i)

// }

std:

:cout << std:

:endl;

destroybitree

(root)

;return0;

}

分行從上到下列印二叉樹。從上到下按層列印二叉樹,同一層的結點按從左到右的順序列印,每一層列印到一行。

輸入:

8

/ \ 6

10/ \ / \ 57

911

輸出:

8610

57911

#include

#include

struct bitnode };

class solution

std:

:queue> qeuetreenode;

qeuetreenode.

push

(root)

;// 下一層的結點數

int nextlevel =0;

// 當前層中未列印的結點數

int tobeprinted =1;

while

(!qeuetreenode.

empty()

)if(node->left != nullptr)

if(node->right != nullptr)

qeuetreenode.

pop();

--tobeprinted;

// 當前層的所有結點已列印完畢,可以繼續列印下一層

if(tobeprinted ==0)

}return0;

}};// 銷毀二叉樹

void

destroybitree

(bitnode* root)

destroybitree

(root->left)

;destroybitree

(root->right)

;// 從最左依次 delete 至根結點

delete root;

root = nullptr;

}int

main

(void

)

之字形列印二叉樹。請實現乙個函式按照之字形順序列印二叉樹,即第一行按照從左到右的順序列印,第二行按照從右到左的順序列印,第三行再按照從左到右的順序列印,其它行以此類推。

輸入:

1

/ \

23/ \ / \

4567

/ \ / \ / \ / \89

1011

1213

1415

輸出:

132

4567

1514

1312

1110

98

按之字形順序列印二叉樹需要兩個棧。在列印某一層的結點時,把下一層的子結點儲存到相應的棧裡。若當前列印的是奇數層(第 1 、3 層等),則先儲存左子結點再儲存右子結點到第乙個棧裡;若列印的是偶數層(第 2 、4層等),則先儲存右子結點再儲存左子結點到第二個棧裡。

#include

#include

struct bitnode };

class solution

std:

:stack> stacklevels[2]

;int current =0;

int next =1;

stacklevels[current]

.push

(root)

;while

(!stacklevels[0]

.empty()

||!stacklevels[1]

.empty()

)if(current ==0)

if(node->right != nullptr)

}else

if(node->left != nullptr)}if

(stacklevels[current]

.empty()

)}return0;

}};// 銷毀二叉樹

void

destroybitree

(bitnode* root)

destroybitree

(root->left)

;destroybitree

(root->right)

;// 從最左依次 delete 至根結點

delete root;

root = nullptr;

}int

main

(void

)

個人部落格:

www.codeapes.cn

劍指offer 從上到下列印二叉樹

普通的列印二叉樹很簡單,使用佇列就可以解決。但是我做的這個題目是要將每一層的節點都存起來,而且不同層之間是分開儲存的。其中有個問題就是我們如何去判斷某一層是遍歷完了,然後要到下一層了呢。我們可以這樣解決,記住每層的個數,這樣遍歷上一層時我們知道上一層個數了就不會遍歷下一層的節點 而遍歷過程中也要把子...

劍指Offer系列32 1 從上到下列印二叉樹

從上到下列印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 3,9,20,15,7 python definition for a binary tree node.class treenode de...

劍指Offer系列32 2 從上到下列印二叉樹2

從上到下按層列印二叉樹,同一層的節點按從左到右的順序列印,每一層列印到一行。例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回其層次遍歷結果 3 9,20 15,7 python definition for a binary tree node.class ...