文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>二叉树各种操作的C语言实现(四)(测试程序)

二叉树各种操作的C语言实现(四)(测试程序)

时间:2010-07-31  来源:frankzfz

这一篇主要是前面各种算法的一个测试程序:

Status visitT(TElemType e)
{
 #ifdef CHAR
  printf("%c",e);
#endif
#ifdef INT
  printf("%d",e);
#endif
  return OK;
}

void main(void)
{
  int i;
  BiTree *T,*p,*c,*q;
  TElemType e1,e2,x;
  InitBiTree(&T);
  printf("构造空二叉树后,树空否?%d(1:YES 0:NO)树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T));
  e1= Root(T);
  if(e1!=Nil)
#ifdef INT
    printf("二叉树的根为:%d\n",e1);
#endif
  #ifdef CHAR
  printf("二叉树的根为:%c\n",e1);
  #endif
  else
    printf("数空,无根\n");
  #ifdef CHAR
  printf("请先序输入二叉树(ab 三个空格表示a为根节点,b为左子树的二叉树)\n");
  #endif
  #ifdef INT
  printf("请先序输入二叉树\n");
  #endif
  CreateBiTree(&T);
  printf("建立二叉树后,广度优先求树的深度=%d\n",BiTreeDepth_queue(T));
  printf(" 建立二叉树后,树空否?=%d(1:YES 0:NO)树的深度为=%d\n",BiTreeEmpty(T),BiTreeDepth(T));
  printf("建立二叉树后,深度优先广度优先求树的深度=%d\n",BiTreeDepth_stack(T));
  printf("二叉树的宽度=%d\n",Width(T));
  printf("二叉树的叶子节点数=%d\n",BiTreeLeafCount(T));
  printf("二叉树的所有的节点数=%d\n",BiTreeCount(T));
  printf("交换左右节点数\n");
  Swap(T);
  InOrderTraverse(T,visitT);
  printf("\n交换左右节点非递归\n");
  Swap_N(T);
  InOrderTraverse(T,visitT);
  printf("\n请输入要查询的节点:");
  scanf("%*c%c",&x);
  printf("返回的b的层号为=%d\n",NodeLevel(T,x));
  
  e1= Root(T);
  if(e1!=Nil)
    printf("二叉树的根为:%c\n",e1);
  else
    printf("数空,无根\n");
  printf("中序递归遍历二叉树\n");
  InOrderTraverse(T,visitT);
  printf("\n中序非递归遍历二叉树\n");
  InOrderTraverse1(T,visitT);
  printf("\n中序非递归遍历二叉树(另一种方法)\n");
  InOrderTraverse2(T,visitT);
  printf("\n先序非递归遍历二叉树\n");
  PreOrderN(T,visitT);
  printf("\n先序递归遍历二叉树\n");
  PreOrder(T,visitT);
  printf("\n后序递归遍历二叉树\n");
  PostOrderTraverse(T,visitT);
  printf("\n后序遍历的非递归二叉树\n");
  PostOrderN(T,visitT);
  printf("\n层序遍历二叉树\n");
  LevelOrderTraverse(T,visitT);
  printf("请输入一个节点的值:\n");
  scanf("%*c%c",&e1);
  p= Point(T,e1);
  printf("节点的值为:%c\n",Value(p));
  printf("欲改变此节点的值,请输入新值:");
  scanf("%*c%c%*c",&e2);
  Assign(p,e2);
  printf("层序遍历二次树:");
  LevelOrderTraverse(T,visitT);

  e1 = Parent(T,e2);
  if(e1!=Nil)
    printf("%c的双亲是%c\n",e2,e1);
  else
    printf("%c没有双亲\n",e2);
  e1 = LeftChild(T,e2);
  if(e1!=Nil)
    printf("%c的左孩子是%c\n",e2,e1);
  else
    printf("%c没有左孩子\n",e2);
  e1= RightChild(T,e2);
  if(e1!=Nil)
    printf("%c的右孩子是%c\n",e2,e1);
  else
    printf("%c没有右孩子\n",e2);
  e1 = LeftSibling(T,e2);
  if(e1!=Nil)
    printf("%c的左兄弟为:%c",e2,e1);

  else
    printf("%c,没有左兄弟",e2);
  e1= RightSibling(T,e2);
  if(e1!=Nil)
    printf("%c的右兄弟为%c\n",e2,e1);
  else
    printf("%c没有右兄弟、\n",e2);
  InitBiTree(&c);
  printf("构造一个右子树为空的二叉树c:\n");
  printf("请先序输入二叉树(如: 1 2 0 0 0表示1为根节点,2为左子树的二叉树\n)");
  CreateBiTree(&c);
  printf("先序递归遍历二叉树c:\n");
  PreOrderTraverse(c,visitT);
  printf("\n树c插入树T中,请输入树T中树c的双亲节点c为左(0)或右(1)子树:");

  scanf("%*c%c%d",&e1,&i);

  p= Point(T,e1);
  InsertChild(p,i,c);
  printf("先序递归遍历二叉树:\n");
  PreOrderTraverse(T,visitT);
  printf("\n删除子树,请输入待删除的子树的双亲节点,左(0)或右(1)子树:");
  scanf("%*c%c%d",&e1,&i);
  p= Point(T,e1);
  DeleteChild(p,i);
  printf("先序递归遍历二叉树:\n");
  PreOrderTraverse(T,visitT);
  printf("\n");
   DestroyBiTree(&T);
}

  下面是在Linux下gcc编译器的运行的结果,在输入是有一个虚节点的问题,虚节点用“#”表示,在输入二叉树的各个节点时,当遇到空节点时,输入"#".按先序的方式输入:

构造空二叉树后,树空否?1(1:YES 0:NO)树的深度=0
数空,无根
请先序输入二叉树(ab 三个空格表示a为根节点,b为左子树的二叉树)
abdg###e##c#f##
建立二叉树后,广度优先求树的深度=4
 建立二叉树后,树空否?=0(1:YES 0:NO)树的深度为=4
建立二叉树后,深度优先广度优先求树的深度=4
二叉树的宽度=3
二叉树的叶子节点数=3
二叉树的所有的节点数=7
交换左右节点数
fcaebdg
交换左右节点非递归
gdbeacf
请输入要查询的节点:b
返回的b的层号为=2
二叉树的根为:a
中序递归遍历二叉树
gdbeacf
中序非递归遍历二叉树
gdbeacf
中序非递归遍历二叉树(另一种方法)
gdbeacf
先序非递归遍历二叉树
abdgecf
先序递归遍历二叉树
abdgecf
后序递归遍历二叉树
gdebfca
后序遍历的非递归二叉树
gdebfca
层序遍历二叉树
abcdefg
请输入一个节点的值:
d
节点的值为:d
欲改变此节点的值,请输入新值:m
层序遍历二次树:abcmefg
m的双亲是b
m的左孩子是g
m没有右孩子
m,没有左兄弟m的右兄弟为e
构造一个右子树为空的二叉树c:
请先序输入二叉树(如: 1 2 0 0 0表示1为根节点,2为左子树的二叉树
)hijl###k###
先序递归遍历二叉树c:
hijlk
树c插入树T中,请输入树T中树c的双亲节点c为左(0)或右(1)子树:b 1
先序递归遍历二叉树:
abmghijlkecf
删除子树,请输入待删除的子树的双亲节点,左(0)或右(1)子树:h 0
先序递归遍历二叉树:
abmghecf

构造空二叉树后,树空否?1(1:YES 0:NO)树的深度=0
数空,无根
请先序输入二叉树(ab 三个空格表示a为根节点,b为左子树的二叉树)
abdg###e##c#f##
建立二叉树后,广度优先求树的深度=4
 建立二叉树后,树空否?=0(1:YES 0:NO)树的深度为=4
建立二叉树后,深度优先广度优先求树的深度=4
二叉树的宽度=3
二叉树的根为:a
请输入要查询的节点:b
返回的b的层号为=2


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载