從上往下列印二叉樹

2022-07-31 11:06:15 字數 1277 閱讀 3241

題目:輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1、2、3、4、5是某棧的壓棧序列,序列4、5、3、2、1是該壓棧序列對應的彈出序列,但4、3、5、1、2就不可能是該壓棧序列的彈出序列

解題方案:

總結上述入棧、出棧的過程,我們可以找到判斷乙個序列是不是棧的彈出序列的規律:如果下乙個彈出的數字剛好是棧頂數字,那麼直接彈出。如果下乙個彈出的數字不在棧頂,我們把壓棧序列中還沒有入棧的數字壓入輔助棧,直到把下乙個需要彈出的數字壓入棧頂為止。如果所有的數字都壓入棧了仍然沒有找到下乙個彈出的數字,那麼該序列不可能是乙個彈出序列。

從上往下列印二叉樹

題目:從上往下列印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。例如下圖依次列印出8、6、10、5、7、9、11.

通過上面的例子,我們可以找到從上到下列印二叉樹的規律:每次列印乙個結點的時候,如果該結點有子結點,則把該結點的子結點放到乙個佇列的末尾。接下來到佇列的頭部取出最早進入佇列的結點,重複前面的列印操作,直至佇列中所有的結點都被列印出來為止。

舉一反三:

不管是廣度優先遍歷乙個有向圖還是一棵樹,都要用到佇列。第一步我們把起始節點(對樹而言是根節點)放入佇列中。接下來每一次從佇列的頭部取出乙個結點,遍歷這個結點之後把從它能到達的結點(對樹而言是子結點)都依次放入對壘。我們重複這個遍歷過程,直到佇列中的結點全部被遍歷為止。

二叉樹中和為某一值的路徑

解題思路:

規律:當用前序遍歷的方式訪問到某一結點時,我們把該節點新增到路徑上,並累加該結點的值。如果該結點為葉節點並且路徑中結點值的和剛好等於輸入的整數,則當前的路徑符合要求,我們把它列印出來。如果當前結點不是葉結點,則繼續訪問它的子結點。當前結點訪問結束後,遞迴函式將自動回到它的父結點。因此我們在函式退出之前要在路徑上刪除當前結點並減去當前結點的值,以確保返回父結點時路徑剛好是從根節點到父結點的路徑。我們不難看出儲存路徑的資料結構實際上是乙個棧,因為路徑要與遞迴呼叫狀態一致,而遞迴呼叫的本質就是乙個壓棧和出棧的過程。

從上往下列印二叉樹

從上往下列印二叉樹需要乙個雙端佇列,stl提供了deque容器符合我們的要求,和測試 如下 include include include using namespace std struct binarytreenode binarytreenode createbinarytreenode in...

從上往下列印二叉樹

題目描述 從上往下列印出二叉樹的每個節點,同層節點從左至右列印。思路 用佇列儲存將要列印的節點,出佇列時,將左節點和右節點分別加入佇列當中,直到隊列為空,列印完畢。public arraylist integer printfromtoptobottom treenode root queue qu...

從上往下列印二叉樹

題目 從上往下列印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。程式 include include include struct binarytreenode 函式名稱 createbinarytree 函式功能 通過二叉樹的先序序列建立二叉樹 輸入引數 proot 二叉樹的根節點 st...