实现二叉树各种遍历算法

简介: 实现二叉树各种遍历算法

目录



前言

提示:记得关注我哦!!!


一、题目

1.二叉树的各种遍历过程及遍历算法设计。

(1) 先序遍历二叉树;

(2) 中序遍历二叉树;

(3)后序遍历二叉树。


2.实现二叉树各种遍历算法

代码如下(示例):

#include<stdio.h>
#include<malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
  ElemType data;
  struct node *lchild;
  struct node *rchild;
}BTNode;
void CreateBTree(BTNode *&b,char *str)
{
  BTNode * St[MaxSize],*p;
  int top=-1,k,j=0;char ch;
  b=NULL;
  ch=str[j];
  while(ch!='\0')
  {
    switch(ch)
    {
    case'(':top++;St[top]=p;k=1;break;
    case')':top--;break;
    case',':k=2;break;
    default:p=(BTNode *)malloc(sizeof(BTNode));
      p->data=ch;p->lchild=p->rchild=NULL;
      if(b==NULL)
        b=p;
      else
      {
        switch(k)
        {
                case 1:St[top]->lchild=p;break;
        case 2:St[top]->rchild=p;break;
        }
      }
    }
    j++;ch=str[j];
  }
}
void DestroyBTree(BTNode *&b)
{
  if(b!=NULL)
  {
    DestroyBTree(b->lchild);
        DestroyBTree(b->rchild);
    free(b);
  }
}
BTNode *FindNode(BTNode *b,ElemType x)
{
  BTNode *p;
  if(b==NULL)
    return NULL;
  else if(b->data==x)
    return b;
  else
  {
    p=FindNode(b->lchild,x);
    if(p!=NULL)
      return p;
    else
      return FindNode(b->rchild,x);
  }
}
BTNode *LchildNode(BTNode *p)
{
  return p->lchild;
}
BTNode *RchildNode(BTNode *p)
{
  return p->rchild;
}
int BTHeight(BTNode *b)
{
  int lchildh,rchildh;
  if(b==NULL)return(0);
  else
  {
    lchildh=BTHeight(b->lchild);
    rchildh=BTHeight(b->rchild);
    return(lchildh>rchildh)?(lchildh+1):(rchildh+1);
  }
}
void DispBTree(BTNode *b)
{
  if(b!=NULL)
  {
    printf("%c",b->data);
    if(b->lchild!=NULL||b->rchild!=NULL)
    {
      printf("(");
      DispBTree(b->lchild);
      if(b->rchild!=NULL)printf(",");
      DispBTree(b->rchild);
      printf(")");
    }
  }
}
#include"btree.cpp"
void PreOrder(BTNode *b)
{
  if(b!=NULL)
  {
    printf("%c",b->data);
    PreOrder(b->lchild);
    PreOrder(b->rchild);
  }
}
void PreOrderl(BTNode *b)
{
  BTNode *St[MaxSize],*p;
  int top = -1;
  if(b!=NULL)
  {
    top++;
    St[top]=b;
    while(top>-1)
    {
      p=St[top];
      top--;
      printf("%c",p->data);
      if(p->rchild!=NULL)
      {
        top++;
        St[top]=p->rchild;
      }
      if(p->lchild!=NULL)
      {
        top++;
        St[top]=p->lchild;
      }
    }
    printf("\n");
  }
}
void InOrder(BTNode *b)
{
  if(b!=NULL)
  {
    InOrder(b->lchild);
    printf("%c",b->data);
    InOrder(b->rchild);
  }
}
void InOrderl(BTNode *b)
{
  BTNode *St[MaxSize],*p;
  int top = -1;
  if(b!=NULL)
  {
    p=b;
    while(top>-1 || p!=NULL)
    {
      while(p!=NULL)
      {
        top++;
        St[top]=p;
        p=p->lchild;
      }
      if(top>-1)
      {
        p=St[top];
        top--;
        printf("%c",p->data);
        p=p->rchild;
      }
    }
    printf("\n");
  }
}
void PostOrder(BTNode *b)
{
  if(b!=NULL)
  {
    PostOrder(b->lchild);
    PostOrder(b->rchild);
    printf("%c",b->data);
  }
}
void PostOrderl(BTNode *b)
{
  BTNode *St[MaxSize],*p;
  int top = -1;
  bool flag;
  if(b!=NULL)
  {
    do
    {    while(b!=NULL)
      { 
        top++;
        St[top]=p;
        b=b->lchild;
      }
        p=NULL;
      flag=true;
      while(top!=-1&&flag)
      {
        b=St[top];
        if(b->rchild==p)
        {
            printf("%c",b->data);
            top--;
            p=b;
        }
        else
        {
          b=b->rchild;
          flag=false;
        }
      }
    }while(top!=-1);
    printf("\n");
  }
}
void TravLevel(BTNode *b)
{
  BTNode *Qu[MaxSize];
  int front,rear;
  front = rear=0;
  if(b!=NULL)printf("%c",b->data);
  rear++;
  Qu[rear]=b;
  while(rear!=front)
  {
    front=(front+1)%MaxSize;
    b=Qu[front];
    if(b->lchild!=NULL)
    {
      printf("%c",b->lchild->data);
      rear=(rear+1)%MaxSize;
      Qu[rear]=b->lchild;
    }
    if(b->rchild!=NULL)
    {
      printf("%c",b->rchild->data);
      rear=(rear+1)%MaxSize;
      Qu[rear]=b->rchild;
    }
  }
  printf("\n");
}
int main()
{
  BTNode *b;
  CreateBTree(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
  printf("二叉树b:");DispBTree(b);printf("\n");
  printf("层次遍历序列:");
  TravLevel(b);
  printf("先序遍历序列:\n");
  printf("   递归算法:");PreOrder(b);printf("\n");
  printf(" 非递归算法:");PreOrder(b);printf("\n");
  printf("中序遍历序列:\n");
  printf("   递归算法:");InOrder(b);printf("\n");
  printf(" 非递归算法:");InOrder(b);printf("\n");
  printf("后序遍历序列:\n");
  printf("   递归算法:");PostOrder(b);printf("\n");
  printf(" 非递归算法:");PostOrder(b);printf("\n");
  DestroyBTree(b);
  return 1;
}


总结

我是不会飞的飞鸟,肝文不易,如果本次文章对你有帮助点赞关注支持一下,谢谢!


相关文章
|
1月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
51 2
|
2月前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
64 5
|
3月前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
3月前
|
存储 缓存 算法
如何提高二叉树遍历算法的效率?
选择合适的遍历算法,如按层次遍历树时使用广度优先搜索(BFS),中序遍历二叉搜索树以获得有序序列。优化数据结构,如使用线索二叉树减少空指针判断,自定义节点类增加辅助信息。利用递归与非递归的特点,避免栈溢出问题。多线程并行遍历提高速度,注意线程安全。缓存中间结果,避免重复计算。预先计算并存储信息,提高遍历效率。综合运用这些方法,提高二叉树遍历算法的效率。
97 5
|
3月前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
61 2
|
3月前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
107 0
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
1天前
|
机器学习/深度学习 算法 安全
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。
|
2天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
31 15
|
2天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。

热门文章

最新文章