測試用例
測試結果
本題**已上傳到:gitbub
從上到下列印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。例如輸入下圖中的二叉樹,則列印出8,6,10,5,7,9,11。
這道題目考的是樹的遍歷演算法,之前我們講過二叉樹有3種常用的遍歷演算法:前序遍歷,中序遍歷,後序遍歷。此外還有一種不常用的層次遍歷演算法,就是從上往下一層一層的訪問樹的節點。
這題目相對簡單,根據要求,我們要訪問根節點,根節點的左孩子,右孩子,左孩子的左孩子,左孩子的右孩子。。。,根據我們以前的經驗,可以用遞迴實現,不過**看起來不是很優雅。那麼有沒有另外的方式呢,當然是有的,可以使用佇列實現。先將根節點入隊,然後迴圈佇列,每次彈出佇列的頭部節點,如果然後列印出該節點的值,如果節點有子節點,則加入佇列,先加左孩子,後加右孩子。根據佇列「先入先出」特點,就能很好的實現我們的需求,從上往下,從左往右。
/**
* 從上到下列印二叉樹
* 遞迴實現
* @param node 二叉樹
*/private
static
void
printbinarytree2
(binarytreenode node)
system.out.
print
(node.val +
" ")
;printbinarytree3
(node);}
private
static
void
printbinarytree3
(binarytreenode node)
if(node.left != null)
if(node.right != null)
printbinarytree3
(node.left)
;printbinarytree3
(node.right)
;}
/**
* 二叉樹節點
*/static
class
binarytreenode
}/**
* 從上到下列印二叉樹
* 佇列實現
** @param node 二叉樹
*/private
static
void
printbinarytree
(binarytreenode node)
deque
deque =
newlinkedlist
<
>()
; deque.
push
(node)
;while
(deque.
size()
>0)
if(tmp.right != null)
}}
public
static
void
main
(string[
] args)
private
static binarytreenode gettree()
private
static binarytreenode gettree2()
private
static binarytreenode gettree3()
8 6 10 5 7 9 11
5 4 3 2 1
1 2 3 4 5
1
從上到下列印二叉樹
原理是二叉樹的層次遍歷 可以用乙個佇列輔助,先將二叉樹根節點入隊,然後出隊,將該節點存入vector中,之後判斷根節點的左子樹和右子樹是否為空,若不為空,依次入隊。然後出隊,再訪問出隊的結點是否有左右子樹,以此類推。核心 vectorprintfromtoptobottom treenode roo...
從上到下列印二叉樹
例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 3,9,20,15,7 2.1 思路分析 題目要求的二叉樹從上到下列印 即按層列印 又稱為二叉樹的廣度優先搜尋 bfs bfs通常借助佇列的先入先出特性來實現。2.2 演算法流程 特例處理 當樹的根結點為空,...
從上到下列印二叉樹
從上到下列印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回 3,9,20,15,7 解題思路 演算法流程 特例處理 當樹的根節點為空,則直接返回空列表 初始化 列印結果列表 res 包含根節點的佇列 q...