二叉树的概念、遍历方法以及先序遍历递归算法

191 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情

二叉树遍历的概念

二叉树遍历是指按照一定次序的访问二叉树道中的每一个结点,并且每个结点仅被访问一次的过程。

  • 在二叉树中左子树和右子树是有严格区别的,在遍历一颗非空二叉树时,根据访问根结点、遍历左子树和遍历右子树之间的先后关系,可以组合成6种遍历方法。然后,我们再规定先遍历左子树,后遍历右子树,就得到了三种遍历方法---先序遍历、中序遍历、后序遍历。
  • 如图二叉树:

1664895841016.png

先序遍历

先序遍历二叉树过程

  1. 访问根结点
  2. 先序遍历左子树
  3. 线序遍历右子树
  • 根据上图二叉树,如果我们使用先序遍历法,结果则为:ABDGCEF

中序遍历

中序遍历二叉树过程

  1. 中序遍历左子树
  2. 访问根结点
  3. 中序遍历右子树
  • 根据上图二叉树,如果我们使用中序遍历法,结果则为:DGBAECF

后序遍历

后序遍历过程

  1. 后序遍历左子树
  2. 后序遍历右子树
  3. 访问根结点
  • 根据上图二叉树,如果我们使用后序遍历法,结果则为:GDBEFCA

先序遍历递归算法

作为一名程序员,使用代码写遍历算法是基本的了。我们用先序遍历的递归算法为例。 假设二叉树采用二叉链存储结构,从根结点t出发进行先序遍历的递归算法。

  • 代码如下:
//先序遍历的递归算法
public void Preorder1(BTreeCladd bt){   
   Preorder2(bt.b);
}
//被调用的方法
public void Preorder2(BTNode<Character> t){
    if(t!=null){
     System.out.print(t.data+"");  //访问根结点
     Preorder2(t.lchild);  //先序遍历左子树
      Preorder2(t.rchild);  //先序遍历右子树
    }
}

注: 在遍历过程中当达到某一个结点时,我们称为访问该结点,通常是为了在这个结点处执行某种操作。