二叉树的三种遍历方式代码实现

二叉树的三种遍历方式代码实现

二叉树遍历方式:先序、中序、后续遍历以及层次遍历,这里主要描述前面三种方式

先序遍历

遍历过程:

  1. 访问根节点
  2. 先序遍历左子树
  3. 先序遍历右子树

例如:下图的遍历结果为 ABDFECGHI
在这里插入图片描述

编码实现

1.利用函数递归实现

void PreOrderTraversal(BinTree BT){
      if(BT){
        printf("%5d",T->Data);//输出节点
        PreOrderTraversal(BT->Left);
        PreOrderTraversal(BT->Right);
      }
}

2.非递归函数实现,例如堆栈

void PreOrderTraversal(BinTree BT)
{
    BinTree T=BT;
    Stack S = CreatStack( Maxsize );//创建并初始化对战S
    while( T || !IsEmpty(S) ){
        while(T){ //一直向左并将沿途的节点压入堆栈
            Push(S,T);
            printf("%5d",T->Data);//输出节点
            T = T->Left;
        }
        if(!IsEmpty(S)){
            T = Pop(S);//弹出堆栈
            T = T->Right;//向弹出节点转向其有节点做一样操作
        }
    }
}

中序遍历

遍历过程:

  1. 中序遍历左子树
  2. 访问根节点
  3. 中序遍历右子树

例如:下图的遍历结果是 DBEFAGHCI
在这里插入图片描述

编码实现

1.利用函数递归实现

void InOrderTraversal(BinTree BT){
      if(BT){
        InOrderTraversal(BT->Left);
        printf("%5d",T->Data);//输出节点
        InOrderTraversal(BT->Right);
      }
}

2.非递归函数实现,例如堆栈

void InOrderTraversal(BinTree BT)
{
    BinTree T=BT;
    Stack S = CreatStack( Maxsize );//创建并初始化对战S
    while( T || !IsEmpty(S) ){
        while(T){ //一直向左并将沿途的节点压入堆栈
            Push(S,T);
            T = T->Left;
        }
        if(!IsEmpty(S)){
            T = Pop(S);//弹出堆栈
            printf("%5d",T->Data);//输出节点
            T = T->Right;//向弹出节点转向其有节点做一样操作
        }
    }
}

后序遍历

遍历过程:

  1. 后序遍历左子树
  2. 后序遍历右子树
  3. 访问根节点

例如:下图的遍历结果是 DEFBHGICA
在这里插入图片描述

编码实现

1.利用函数递归实现

void PostOrderTraversal(BinTree BT){
      if(BT){
        PostOrderTraversal(BT->Left);
        PostOrderTraversal(BT->Right);
        printf("%5d",T->Data);//输出节点
      }
}

2.非递归函数实现,例如堆栈

此处引用其他博主的方法:https://blog.csdn.net/Dreamluna/article/details/82780130

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值