实现二叉树各种遍历算法

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

目录



前言

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


一、题目

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;
}


总结

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


相关文章
|
11天前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
13 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
11天前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
14 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
15天前
|
存储 算法
【二叉树】—— 算法题
【二叉树】—— 算法题
【二叉树】—— 算法题
|
11天前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
15 0
|
2月前
|
算法
【初阶数据结构篇】二叉树算法题
二叉树是否对称,即左右子树是否对称.
22 0
|
2月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
72 0
|
2月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
37 0
|
3月前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
33 1
|
17天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
2天前
|
存储
基于遗传算法的智能天线最佳阵列因子计算matlab仿真
本课题探讨基于遗传算法优化智能天线阵列因子,以提升无线通信系统性能,包括信号质量、干扰抑制及定位精度。通过MATLAB2022a实现的核心程序,展示了遗传算法在寻找最优阵列因子上的应用,显著改善了天线接收功率。