zoukankan      html  css  js  c++  java
  • 二叉树的遍历

    二叉树的遍历

    让编程改变世界

    Change the world by program


      二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。

      二叉树的遍历次序不同于线性结构,线性结构最多也就是分为顺序、循环、双向等简单的遍历方式。

      树的结点之间不存在唯一的前驱和后继这样的关系,在访问一个结点后,下一个被访问的结点面临着不同的选择。这就像我们的人生,漫漫长途上一步踏错,满盘皆输!

    二叉树的遍历方式可以很多,如果我们限制了从左到右的习惯方式,那么主要就分为一下四种:

    前序遍历

    中序遍历

    后序遍历

    层序遍历

    前序遍历:

    若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。

    遍历的顺序为:ABDHIEJCFKG

    中序遍历:

    若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树。

    遍历的顺序为:HDIBEJAFKCG

    后序遍历:

    若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点。

    遍历的顺序为:HIDJEBKFGCA

    层序遍历:

    若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。

    遍历的顺序为:ABCDEFGHIJK

    二叉树的遍历C语言实现

      

      定义二叉树结点结构:

    1  //二叉树结构
    2  typedef char DATA
    3  typedef struct CBT         //定义二叉树结点类型
    4 {
    5     DATA  data;
    6      struct CBT  *left;         //左子树结点指针
    7      struct CBT  *right;      //右子树结点指针
    8  }CBTType;    

       (1)先序遍历算法(递归法)

    1 void DLRTree( CBTType *treeNode,void(*TreeNodeData)(CBTType *p))
    2 {
    3    if(treeNode)
    4        {
    5            TreeNodeData(treeNode);         //显示结点的数据
    6             DLRTree(treeNode->left,TreeNodeDta);
    7             DLRTree(treeNode->left,TreeNodeDta);
    8        }    
    9 }

       (2)中序遍历

    void DLRTree( CBTType *treeNode,void(*TreeNodeData)(CBTType *p))
    {
    if(treeNode)
    {
    
    DLRTree(treeNode->left,TreeNodeDta);
    TreeNodeData(treeNode);                      //显示结点的数据
    DLRTree(treeNode->left,TreeNodeDta);
    } 
    }

       (3)后序遍历

     1  void DLRTree( CBTType *treeNode,void(*TreeNodeData)(CBTType *p))
     2  {
     3    if(treeNode)
     4         {
     5            
     6              DLRTree(treeNode->left,TreeNodeDta);
     7              DLRTree(treeNode->left,TreeNodeDta);
     8                  TreeNodeData(treeNode);         //显示结点的数据
     9        }    
    10  }

      

  • 相关阅读:
    常见寻找OEP脱壳的方法
    Windows内核原理系列01
    HDU 1025 Constructing Roads In JGShining's Kingdom
    HDU 1024 Max Sum Plus Plus
    HDU 1003 Max Sum
    HDU 1019 Least Common Multiple
    HDU 1018 Big Number
    HDU 1014 Uniform Generator
    HDU 1012 u Calculate e
    HDU 1005 Number Sequence
  • 原文地址:https://www.cnblogs.com/Breaking-HALO/p/5225251.html
Copyright © 2011-2022 走看看