关于二叉树的遍历

时间:2009-09-10

  作者:曹忠明,华清远见嵌入式学院讲师。

  二叉树遍历就是沿某条搜索路径周游二叉树,对树中的每一个节点访问且仅访问。由于二叉树的递归性质,遍历算法也是递归的。

  二叉树的遍历有先序遍历、中序遍历和后序遍历。下面以(图一)中二叉树介绍一下这三种遍历。

  (图一) 二叉树

  1、先序遍历

  先序遍历的遍历规则是(中 前 后),中就是父节点,前就是左孩子,后是右孩子。既先访问当前节点,再访问左子树,访问右子树。这个过程是由根节点开始的一个递归的过程。以上面这个二叉树为例。他的遍历过程为:

  (1)ABC

  (2)A(BD)(CE)

  (3)A(B(DF))(C(EGH))

  算法实现为:

  PREORDER ( bitree *r)

  {

  if ( r = = NULL )

  return ;                                      /*空树返回*/

  printf ( " %c ",r->data );                     /*先访问当前节点*/

  PREORDER ( r->lchild );                    /*再访问该节点的左子树*/

  PREORDER ( r->rchild );                   /*访问该节点右子树*/

  }

  2、中序遍历

  中序遍历的遍历规则是(前 中 后),既访先问左子树,再访问当前节点,访问右子树。他的遍历过程为:

  (1)BAC

  (2)(DB)A(CE)

  (3)((DF)B)A(C(GEH)

  算法实现为:

  INORDER ( bitree *r)

  {

  if ( r = = NULL )

  return ;                                       /*空树返回*/

  INORDER ( r->lchild );                      /*先访问该节点的左子树*/

  printf ( " %c ",r->dATA );                     /*再访问当前节点*/

  INORDER ( r->rchild );                     /*访问该节点右子树*/

  }

  3、后序遍历

  中序遍历的遍历规则是(前 后 中),既先访问当前节点的左子树,在访问当前节点的右子树,访问当前节点。他的遍历过程为:

  (1)BCA

  (2)(DB)(EC)A

  (3)((FD)B)((GHE)C)A

  算法实现为:

  POSTORDER ( bitree *r)

  {

  if ( r = = NULL )

  return ;                                       /*空树返回*/

  POSTORDER ( r->lchild );                 /*先访问该节点的左子树*/

  POSTORDER ( r->rchild );                /*再访问该节点右子树*/

  printf ( " %c ",r->data );                     /*访问当前节点*/

  }

  由上面一个例子可以看出,这是一个递归的过程,由根节点开始,递归的对各自的孩子结点按规则遍历。
  “本文由华清远见https://www.embedu.org/index.htm提供”


  
上一篇:如何提高操作系统的实时性
下一篇:FORK()函数的理解

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料