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

来源:互联网 发布:php printr 带格式化 编辑:程序博客网 时间:2024/05/27 19:27

preface:主要是最近用层次遍历比较多,先中后序的遍历都有递归与非递归的方式,也比较容易明白,但层次不是很熟悉,自己不是很擅长,故记录下来。

递归与非递归

class TreeNode(object):    def __init__(self, x):        self.val = x        self.left = None        self.right = Noneclass 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 resultsa1 = 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 = a2a1.right = a3a2.left = a4a2.right = a5a5.left = a7a5.right = a8a3.right = a6a = Solution()a.level_1(a1)a.level_2(a1)

参考:http://blog.csdn.net/zzran/article/details/8778021


0 0