二叉树的遍历----落雨

遍历二叉树:
概念: 树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问一次且仅访问一次,我们把这种对所有节点的访问称为遍历(traversal)。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用递归,广度优先一般用队列。一般情况下能用递归实现的算法大部分也能用堆栈来实现。
如图:
简单的二叉树

深度优先遍历

在深度优先遍历中,又分为:“层级遍历”,“先序遍历”,“中序遍历”,“后序遍历”。
层级遍历 :我们先访问根节点,然后递归使用先序遍历访问左子树,再递归使用先序遍历访问右子树。
------ 根节点->左子树->右子树。

def breadth_travel(self):
        """利用队列实现树的层次遍历"""
        if root == None:
            return
        queue = []
        queue.append(root)
        while queue:
            node = queue.pop(0)
            print node.elem,
            if node.lchild != None:
                queue.append(node.lchild)
            if node.rchild != None:
                queue.append(node.rchild)

因此遍历结果为:0,1,2,3,4,5,6,7,8,9

先序遍历:我们先访问根节点,然后递归使用先序遍历访问左子树,再递归使用先序遍历访问右子树。
------ 根节点->左子树->右子树

def preorder(self, root):
      """递归实现先序遍历"""
      if root == None:
          return
      print root.elem
      self.preorder(root.lchild)
      self.preorder(root.rchild)

因此遍历结果为:0,1,3,7,8,4,9,2,5,6

中序遍历:我们递归使用中序遍历访问左子树,然后访问根节点,最后再递归使用中序遍历访问右子树。
------ 左子树->根节点->右子树

def inorder(self, root):
      """递归实现中序遍历"""
      if root == None:
          return
      self.inorder(root.lchild)
      print root.elem
      self.inorder(root.rchild)

因此遍历结果为:7,3,8,1,9,4,0,5,2,6
后序遍历:我们先递归使用后序遍历访问左子树和右子树,最后访问根节点。
------ 左子树->右子树->根节点

def postorder(self, root):
      """递归实现后续遍历"""
      if root == None:
          return
      self.postorder(root.lchild)
      self.postorder(root.rchild)
      print root.elem

因此遍历结果为:7,8,3,9,4,1,5,6,2,0

广度优先遍历

广度优先遍历其实就是层级遍历:
遍历顺序就是,从上到下、从左到右。依次遍历,代码见 深度优先-层级遍历

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值