演算法學習 day5 從上到下列印二叉樹

2021-09-08 14:08:52 字數 1893 閱讀 3656

測試用例

測試結果

本題**已上傳到: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...