python数据结构——层次遍历的两种方法

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


猜你喜欢

转载自blog.csdn.net/u010454729/article/details/50997907