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

 

posted @ 2015-07-22 14:42  曾可爱  阅读(105)  评论(0编辑  收藏  举报