《剑指offer》【按之字形顺序打印二叉树】(python版)

题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
实现思路:该题本质上与【把二叉树打印成多行】是一个题,区别在于本题需要判断当前层输出方向。考虑增加一个标志变量指示当前遍历朝向。

def Print(self, pRoot):
        # write code here
        nodelist = []
        outlist = []
        # 增加标志变量,初始化为从左至右
        lefttoright = True
        if pRoot:
            nodelist.append([pRoot])
        else:
            return outlist
        while len(nodelist) and len(nodelist[0]):
            # 如果当前层是从左到右遍历
            if lefttoright:
                outlist.append([node.val for node in nodelist[0]])
                # 修改标志变量
                lefttoright = False
            else:
                # 如果当前层是从右至左遍历输出,则逆序将结点值存入输出列表
                outlist.append([nodelist[0][i].val for i in range(len(nodelist[0])-1, -1, -1)])
                lefttoright = True
            curnodelist = []
            for i in range(len(nodelist[0])):
                curnode = nodelist[0][i]
                if curnode.left:
                    curnodelist.append(curnode.left)
                if curnode.right:
                    curnodelist.append(curnode.right)
            nodelist.append(curnodelist)
            del nodelist[0]
        return outlist

测试二叉树结构:

![二叉树](https://img-blog.csdn.net/20180702175730219?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwMTQxODY3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 输出结果
[[4], [6, 2], [3, 5, 7], [1]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值