二叉树的遍历方式(C语言)

简介: 二叉树的遍历方式(C语言)

简介:

二叉树的遍历分为前序遍历、中序遍历和后序遍历。其存储结构分为顺序结构(数组)和链式结构。

顺序结构:

利用数组存储二叉树的结点的数据,其结点的父子关系是通过他们的数组的位置来反映的。顺序结构通常对与的是完全二叉树。存储的顺序是从上到下、从左到右。优点:存储空间利用率高、计算简单。缺点:不易实现增加、删除操作。

程序代码:

#include<stdio.h>
int a[101];
int n;
void qian(int a[],int i)
{
  if(i>n)
    return;
  printf("%d ",a[i]);
  qian(a,i*2);
  qian(a,i*2+1);
  
}
void zhong(int a[],int i)
{
  if(i>n)
    return;
  zhong(a,i*2);
  printf("%d ",a[i]);
  zhong(a,i*2+1);
}
void hou(int a[],int i)
{
  if(i>n)
    return;
  hou(a,i*2);
  hou(a,i*2+1);
  printf("%d ",a[i]); 
}
int main()
{
  int i,m,j,k;
  scanf("%d",&n);
  for(i=1;i<=n;i++)
    a[i]=i;
  printf("输入的数组为:\n");
  for(i=1;i<=n;i++)
    printf("%d ",a[i]);
  printf("\n输入前序遍历的数组:\n");
  qian(a,1);
  printf("\n输出中序遍历的数组:\n");
  zhong(a,1);
  printf("\n输出后序遍历的数组:\n");
  hou(a,1);
  return 0;
}

链式结构:

链式结构的存储是利用链表,二叉树的指针至少包括三部分:数据域、左指针域和右指针域。它的优点是节省空间但是操作麻烦。

程序代码:

#include<stdio.h>
#include<stdlib.h>
struct node
{
  int date;
  struct node *lift,*right;
};
typedef struct node LNode,*Link;
void creat(Link *head);
void qian(Link head);
void zhong(Link head);
void hou(Link head);
int main()
{
  Link head;
  head=NULL;
  printf("输入二叉树链式:\n");
  creat(&head);
  printf("输出前序遍历:\n");
  qian(head);
  printf("\n输出中序遍历:\n");
  zhong(head);
  printf("\n输出后序遍历:\n");
  hou(head);
  return 0;
}
void creat(Link *head)
{
  int a;
  scanf("%d",&a);
  if(a==0)
    *head=NULL;
  else
  {
    *head=(Link)malloc(sizeof(LNode));
    (*head)->date=a;
    creat(&(*head)->lift);
    creat(&(*head)->right);
  }
  
}
void qian(Link head)
{
  if(head!=NULL)
  {
    printf("%d ",head->date);
    qian(head->lift);
    qian(head->right);
  } 
}
void zhong(Link head)
{
  if(head!=NULL)
  {
    zhong(head->lift);
    printf("%d ",head->date);
    zhong(head->right);
  }
}
void hou(Link head)
{
  if(head!=NULL)
  {
    hou(head->lift);
    hou(head->right);
    printf("%d ",head->date);
  }
}






相关文章
|
1月前
|
C语言
C语言写二叉树
C语言写二叉树
33 0
|
7月前
|
存储 算法 C语言
【C语言数据结构(基础版)】第五站:树和二叉树(上)
【C语言数据结构(基础版)】第五站:树和二叉树
64 0
|
8月前
|
存储 算法 Java
【数据结构】二叉树的前中后序遍历(C语言)
【数据结构】二叉树的前中后序遍历(C语言)
|
1月前
|
C语言
【C语言/数据结构】二叉树(层序遍历|判断完全二叉树|性质)
【C语言/数据结构】二叉树(层序遍历|判断完全二叉树|性质)
286 52
|
1月前
|
存储 算法 编译器
【数据结构】C语言实现链式二叉树(附完整运行代码)
【数据结构】C语言实现链式二叉树(附完整运行代码)
41 1
|
8月前
|
存储 算法 C语言
二叉树的概念和性质/向上调整、向下调整算法/堆的插入和删除/堆排序/Top-K问题【上】【数据结构/二叉树/初阶/C语言实现】
二叉树的概念和性质/向上调整、向下调整算法/堆的插入和删除/堆排序/Top-K问题【上】【数据结构/二叉树/初阶/C语言实现】
30 0
|
8月前
|
存储 C语言 C++
C语言---数据结构实验---数制转换---表达式求值---回文判断---二叉树创建遍历
C语言---数据结构实验---数制转换---表达式求值---回文判断---二叉树创建遍历
|
1月前
|
存储 C语言
小白的二叉树(C语言实现)
小白的二叉树(C语言实现)
|
10月前
|
存储 C语言 计算机视觉
二叉树的链式结构 - C语言(含有大量递归)上
二叉树的链式结构 - C语言(含有大量递归)
72 0
|
1月前
|
存储 算法 C语言
二叉树顺序结构与堆的概念及性质(c语言实现堆)
二叉树顺序结构与堆的概念及性质(c语言实现堆)
27 0