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 ...