preface:主要是最近用层次遍历比较多,先中后序的遍历都有递归与非递归的方式,也比较容易明白,但层次不是很熟悉,自己不是很擅长,故记录下来。
递归与非递归
class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = None class Solution(object): def level_1(self, root): '''递归层次打印,根节点作为第0层,之后层次依次增加,''' def print_at_level(root, level,result): if not root or level<0: return 0 if level==0: result.append(root.val) print root.val return 1 return print_at_level(root.left, level-1, result)+print_at_level(root.right, level-1, result) i = 0 results = [] while True: result = [] print "level i:",i if not print_at_level(root,i, result):#将每层的结果放到results列表中, break i+=1 results+=result,#将每层的结果追加到results中 print results def level_2(self, root): '''设置双指针,一个指向访问当前开始的节点,一个指向访问当层结束节点的下一个位置''' vec = list() vec.append(root) cur = 0 end = 1 results = [] while cur < len(vec): end = len(vec) result = [] while cur < end: print vec[cur].val result.append(vec[cur].val) if vec[cur].left: vec.append(vec[cur].left) if vec[cur].right: vec.append(vec[cur].right) cur+=1 print "cur",cur results+=result, print results a1 = TreeNode(1) a2 = TreeNode(2) a3 = TreeNode(3) a4 = TreeNode(4) a5 = TreeNode(5) a6 = TreeNode(6) a7 = TreeNode(7) a8 = TreeNode(8) a1.left = a2 a1.right = a3 a2.left = a4 a2.right = a5 a5.left = a7 a5.right = a8 a3.right = a6 a = Solution() a.level_1(a1) a.level_2(a1)
参考:http://blog.csdn.net/zzran/article/details/8778021