LeetCode#102 Binary Tree Level Order Traversal
Problem Definition:
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
Solution:
1)二叉树的层序遍历:用队列来保存将要访问的节点。即在访问节点的过程中,将其子节点加入队列。
1 def levelOrder(root): 2 od=[] 3 if not root: #if empty 4 return od 5 qu=[] 6 qu+=root, 7 while qu: 8 r=qu.pop(0) 9 od+=r.val 10 if r.left: 11 qu+=r.left, 12 if r.right: 13 qu+=r.right, 14 return od
2)将不同层保存在不同的序列中。以上算法只能得到一个访问树中所有节点的层序顺序,而要将不同层分开,需要一个计数变量。
1 def levelOrder(root): 2 od=[] 3 if not root: #empty 4 return od 5 qu,cd=[],[] 6 qu+=root, 7 count=1 #计数变量 8 while qu: #not empty 9 r=qu.pop(0) 10 cd+=r.val 11 12 if r.left: 13 qu+=r.left, 14 if r.right: 15 qu+=r.right, 16 17 count-=1 #每次出队一个,计数减一 18 if not count: #一层结束,coun==0 19 od+=cd, 20 cd=[] 21 count=len(qu) #重置count 22 return od