二叉樹按層列印,同時輸出格式滿足:列印完一層要換行,每一行的行首標明:level i(i=1,2,3...層)
如: 1
2 3
4 5
輸出列印為:
level1: 1
level2: 2 3
level3:4 5
思路:1.先把二叉樹的層次遍歷搞懂:
用佇列實現,原理是:根節點入隊,然後在佇列不空的時候迴圈,迴圈體操作為:丟擲隊首元素並向隊尾新增該丟擲節點的左右子節點(如果不為空的話)
2.題目有兩個額外的要求。a.換行列印。b.列印行號。其實就是讓我們在層次遍歷時遇到每一層的最右節點出隊列印時換行並列印行號,
其實a和b是一樣的,只要知道怎麼換行,在換行時加上level++的列印欄位就可以了。
3.注意到:在實現過程中上一層的最右節點的列印導致:a.上一層列印結束,該換行了;b.此時隊尾必定是下一層的最右乙個元素,因為出隊列印必新增左右子節點,如果有的話。這個資訊就是解題的關鍵所在。
4.**如下:關鍵在於:用cur與last兩個標記,分別標記了:上一層的最右乙個節點與一直往隊尾新增的節點。如此,在每列印一次並且已經做了新增左右子節點的工作後,加上判斷是否temp==cur,就輕鬆掌握了每一層結束的時機了。
1private
static
void
showbylevel(node head)
18if (temp.right != null
) 22
if (temp == cur && !queue.isempty()) 26}
27 }
二叉樹相關題
1 有父指標。分兩種情況 node findnextnode node node 2 右子樹為空,順著父指標往上找,直到找到乙個節點是其父節點的左孩子,則這個父節點就是下乙個節點 else next parent return next 2 普通二叉樹,借助中序遍歷 查詢中序遍歷的某個節點的下乙個節...
二叉樹相關演算法
節點 class node t public node t left public node t right public node t value,node t left,node t right public node t value this value,null null 二叉樹 前中後深度...
二叉樹相關演算法 二
leetcode 437.path sum iii 第乙個想法就是遍歷二叉樹,找出每個節點的可能性。這個思路時間複雜度為o n 2 private int num public intpathsum treenode root,int sum private void recur treenode ...