二叉树遍历(python)

注:参考博客 不积跬步无以至千里 ,以这个二叉树为例:

# -*- coding:utf-8 -*-
class TreeNode:
   def __init__(self, x=None, left=None, right=None):
       self.val = x
       self.left = left
       self.right = right
       
class Order:
    def PreOrder(self, pRoot):
        if not pRoot: return []
        return [pRoot.val] + self.PreOrder(pRoot.left) + self.PreOrder(pRoot.right)
        
    def InOrder(self, pRoot):
        if not pRoot: return []
        return self.InOrder(pRoot.left) + [pRoot.val] + self.InOrder(pRoot.right)
        
    def BackOrder(self, pRoot):
        if not pRoot: return []
        return self.BackOrder(pRoot.left) + self.BackOrder(pRoot.right) + [pRoot.val]

class Circle:
    def PreOrder(self, pRoot):
        res, stack = [],[]
        while pRoot or stack:
            if pRoot:
                res.append(pRoot.val)
                stack.append(pRoot.right)
                pRoot = pRoot.left
            else:
                pRoot = stack.pop()
        return res

    def InOrder(self, pRoot):
        res, stack = [],[]
        while pRoot or stack:
            if pRoot:
                stack.append(pRoot)
                pRoot = pRoot.left
            else:
                pRoot = stack.pop()
                res.append(pRoot.val)
                pRoot = pRoot.right
        return res
        
    def BackOrder(self, pRoot):
        res, stack = [],[]
        while pRoot or stack:
            if pRoot:
                res.append(pRoot.val)
                stack.append(pRoot.left)
                pRoot = pRoot.right
            else:
                pRoot = stack.pop()
        return res[::-1]

    def BFS(self, pRoot):
        if not pRoot: return
        queue = [pRoot]
        res = []
        while queue:
            node = queue.pop(0)
            res.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        return res
            
    def DFS(self, pRoot):
        if not pRoot: return
        stack = [pRoot]
        res = []
        while stack:
            node = stack.pop()
            res.append(node.val)
            if node.right:
                stack.append(node.right)
            if node.left:
                stack.append(node.left)
        return res
                
### 新建二叉树 ###          
node5 = TreeNode(5)
node6 = TreeNode(6)
node7 = TreeNode(7)
node8 = TreeNode(8)
node9 = TreeNode(9)
node4 = TreeNode(4, node8, node9)
node3 = TreeNode(3, node6, node7)
node2 = TreeNode(2, node4, node5)
root = TreeNode(1, node2, node3)
 
order = Order()
circle = Circle()
print('前序遍历(根-左-右):',order.PreOrder(root))
print('前序遍历(根-左-右):',circle.PreOrder(root))
print('中序遍历(左-根-右):',order.InOrder(root))
print('中序遍历(左-根-右):',circle.InOrder(root))
print('后序遍历(左-右-根):',order.BackOrder(root))
print('后序遍历(左-右-根):',circle.BackOrder(root))
print('层次遍历:          ',circle.BFS(root))
print('深度优先遍历:      ',circle.DFS(root))

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值