题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
输出:
二维列表:[[1,2],[4,5]]
思路:
使用两个列表分别存放当前层节点,下一层节点
1 # -*- coding:utf-8 -*-
2 # class TreeNode:
3 # def __init__(self, x):
4 # self.val = x
5 # self.left = None
6 # self.right = None
7 class Solution:
8 # 返回二维列表[[1,2],[4,5]]
9 def Print(self, pRoot):
10 # write code here
11 result = []
12 cur_tmp = []
13 if pRoot==None:
14 return result
15 cur_tmp.append(pRoot)
16 result.append([t.val for t in cur_tmp])
17
18 while cur_tmp:
19 next_tmp= []
20 for i in cur_tmp:
21 if i.left:
22 next_tmp.append(i.left)
23 if i.right:
24 next_tmp.append(i.right)
25 if next_tmp: # 最后一层的叶子节点,next_tmp是空的
26 result.append([t.val for t in next_tmp])
27 cur_tmp = next_tmp
28
29 return result
之字形打印二叉树
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路
同上面的思路,多设置了一个标志变量flag
note:
1.输出是二维列表形式
2.在设置标志变量后,注意紫色代码部分,不然会重复打印
3.下面两行代码任选一种
result.append([next_line[i].val for i in range(len(next_line)-1,-1,-1)])
result.append([i.val for i in reversed(next_line)])
如果要倒序遍历访问序列中的元素,可以对该序列使用reversed() 函数,reversed函数会生成一份倒序列表的拷贝,但是不会改变原列表。
第一种方式比第二种好,因为不需要更多的内存开销来存放reversed(list)副本
1 # -*- coding:utf-8 -*-
2 # class TreeNode:
3 # def __init__(self, x):
4 # self.val = x
5 # self.left = None
6 # self.right = None
7 class Solution:
8 def Print(self, pRoot):
9 # write code here
10 result = []
11 cur_line = []
12 next_line = []
13 if pRoot==None:
14 return result
15 cur_line.append(pRoot)
16 result.append([i.val for i in cur_line])
17 flag = True
18 while len(cur_line) != 0:
19 for i in cur_line:
20 if i.left:
21 next_line.append(i.left)
22 if i.right:
23 next_line.append(i.right)
24 if flag and next_line:# 偶数层,逆着打印
25 #result.append([next_line[i].val for i in range(len(next_line)-1,-1,-1)])
26 result.append([i.val for i in reversed(next_line)])
27 flag = False
28 elif flag==False and next_line:
29 result.append([i.val for i in next_line])
30 flag = True
31 cur_line,next_line = next_line,[]
32 return result
33
34