二叉树实现源代码

2016-02-19 17:20 1 1 收藏

下面,图老师小编带您去了解一下二叉树实现源代码,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - 编程语言 】

  二叉树实现源代码如下:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  

#include conio.h
#include stdio.h
#include stdlib.h
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
typedef int status;
typedef struct BiNode
{
  char Data;
  struct BiNode* lChild;
  struct BiNode* rChild;
}BiNode,*pBiNode;
status CreateTree(BiNode** pTree);
status PreOrderTraval(BiNode* pTree);
status Visit(char Data);
status Display(BiNode* pTree,int Level);
status Clear(BiNode* pTree);
BiNode *pRoot=NULL;
main()
{
  clrscr();
  CreateTree(&pRoot);
  printf("nPreOrder:");
  PreOrderTraval(pRoot);
  printf("n");
  printf("nInOrder:");
  InOrderTraval(pRoot);
  printf("n");
  printf("nPostOrder:");
  PostOrderTraval(pRoot);
  printf("n");
  printf("nShowLeaves:");
  ShowLeaves(pRoot);
  printf("n-----------------------n");
  printf("n");
  Display(pRoot,0);
  printf("n");
  printf("nDeleting Tree:n");
  DelTree(pRoot);
  printf("BiTree Deleted.");
  getch();
}
status CreateTree(BiNode** pTree) /*Input Example: abd##e##cf##g##*/
{
  char ch;
  scanf("%c",&ch);
  if(ch==‘#‘)
  {
    (*pTree)=NULL;
  }
  else
  {
    if(!((*pTree)=(BiNode*)malloc(sizeof(BiNode))))
    {
      exit(OVERFLOW);
    }
    (*pTree)-Data=ch;
    CreateTree(&((*pTree)-lChild));
    CreateTree(&((*pTree)-rChild));
  }
return OK;
}
status PreOrderTraval(BiNode* pTree)
{
  if(pTree)
  {
    if(Visit(pTree-Data))
    {
      if(PreOrderTraval(pTree-lChild))
      {
        if(PreOrderTraval(pTree-rChild))
        {
          return OK;
        }
      }
    }
    return ERROR;
  }
  else
  {
    return OK;
  }
}
status InOrderTraval(BiNode* pTree)
{
  if(pTree)
  {
    if(InOrderTraval(pTree-lChild))
    {
      if(Visit(pTree-Data))
      {
        if(InOrderTraval(pTree-rChild))
        {
          return OK;
        }
      }
      return ERROR;
    }
    return ERROR;
  }
  else
  {
    return OK;
  }
}
status PostOrderTraval(BiNode* pTree)
{
  if(pTree)
  {
    if(PostOrderTraval(pTree-lChild))
    {
      if(PostOrderTraval(pTree-rChild))
      {
        if(Visit(pTree-Data))
        {
          return OK;
        }
        return ERROR;
      }
    }
    return ERROR;
  }
  else
  {
    return OK;
  }
}
status Visit(char Data)
{
  printf("%c",Data);
  return OK;
}
status Display(BiNode* pTree,int Level)
{
  int i;
  if(pTree==NULL) return;
  Display(pTree-lChild,Level+1);
  for(i=0;iLevel-1;i++)
  {
    printf(" ");
  }
  if(Level=1)
  {
    printf("--");
  }
  printf("%cn",pTree-Data);
  Display(pTree-rChild,Level+1);
}
status ShowLeaves(BiNode* pTree)
{
  if(pTree)
  {
    if(ShowLeaves(pTree-lChild))
    {
      if(ShowLeaves(pTree-rChild))
      {
        if((pTree-lChild==NULL)&&(pTree-rChild==NULL))
        {
          if(!Visit(pTree-Data))
          {
            return ERROR;
          }
        }
        return OK;
      }
    }
    return ERROR;
  }
  else
  {
    return OK;
  }
}
status DelTree(BiNode* pTree)
{
  if(pTree)
  {
    if(DelTree(pTree-lChild))
    {
      if(DelTree(pTree-rChild))
      {
        printf("Deleting %cn",pTree-Data);
        free((void*)pTree);
        return OK;
      }
    }
    return ERROR;
  }
  else
  {
    return OK;
  }
}

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1614985.html

延伸阅读
递归遍历与非递归遍历 前面写过一些关于递归的文章,因为那时还没有写到树,因此也举不出更有说服力的例子,只是阐述了“递归是一种思想”,正像网友评价的,“一篇入门的文章”。但只要能能让你建立“递归是一种思想”这个观念,我的努力就没有白费。 !-- frame contents -- !-- /frame contents -- 现在,讲完了二叉...
树 因为现实世界中存在这“树”这种结构——族谱、等级制度、目录分类等等,而为了研究这类问题,必须能够将树储存,而如何储存将取决于所需要的操作。这里有个问题,是否答应存在空树。 !-- frame contents -- !-- /frame contents -- 有些书认为树都是非空的,因为树表示的是一种现实结构,而0不是自然数;我用过的...
才刚开了个头,就要说再见了——在树这里,除了二叉树,别的都还没有讲。为什么可以总结了呢?因为前面已经涉及到了树的两个基本用途,而假如再讲B+、B-,就不能不提到搜索,假如是胜者树就不能不提到排序。为此,把这部分放到后面。 !-- frame contents -- !-- /frame contents -- 我前面所做的努力,只是让你有个基本概念,什么...
一棵二叉查找树是按二叉树结构来组织的。这样的树可以用链表结构表示,其中每一个结点都是一个对象。结点中除了数据外,还包括域left,right和p,它们分别指向结点的左儿子、右儿子,如果结点不存在,则为NULL。 它或者是一棵空树;或者是具有下列性质的二叉树: 1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树...
本课主题: 实验七 查找 教学目的: 练习顺序查找、折半查找及二叉排序树的实现 教学重点: 教学难点: 授课内容: 顺序查找 折半查找 顺序查找及折半查找示例 二叉排序树 示例

经验教程

720

收藏

12
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部