二叉树实现源代码

二叉树实现源代码如下:

#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;i<Level-1;i++)
  {
    printf(" ");
  }
  if(Level>=1)
  {
    printf("--");
  }
  printf("%c\n",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 %c\n",pTree->Data);
        free((void*)pTree);
        return OK;
      }
    }
    return ERROR;
  }
  else
  {
    return OK;
  }
}

时间: 2024-10-25 22:23:58

二叉树实现源代码的相关文章

表达式求值、表达式转二叉树

1.后序表达式求值: 后续表达式(逆波兰式)的特点:没有括号. 求值方法: 从前向后扫, 遇到操作数压栈: 遇到操作符,从栈中取出2个操作数运算,结果压栈. 最终栈中所剩的数为结果. 2.中序表达式求值 我们先来定义运算符的优先级: ( +,- *,/,% 从上到下依次升高 准备2个栈,一个专门存放运算符,另一个专门存放操作数. 1.遇到),那么退栈计算到(为止.结果压栈. 2.遇到运算数.那么压栈. 3.如果当前运算符优先级低于栈顶运算符.那么计算栈顶运算符并将结果压栈. 4.否则压栈. 计算

C#数据结构与算法揭秘八

这节重点讨论 树的结构的源代码实现. 先做一铺垫,讨论一下二叉树的存储结构.二叉树的存储结构分为线性存储和链式存储等等. 1.二叉树的顺序存储结构 对于一棵完全二叉树,由性质 5可计算得到任意结点 i 的双亲结点序号.左孩子结点序号和右孩子结点序号.所以,完全二叉树的结点可按从上到下和从左到右的顺序存储在一维数组中,其结点间的关系可由性质 5计算得到,这就是二叉树的顺序存储结构.下图所示的二叉树的顺序存储结构为: 但是,对于一棵非完全二叉树,不能简单地按照从上到下和从左到右的顺序存放在一维数组中

通过分析JDK源代码研究TreeMap红黑树算法实现

简介:TreeMap 和 TreeSet 是 Java Collection Framework 的两个重要成员,其中 TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常用实现类.虽然 HashMap 和 HashSet 实现的接口规范 不同,但 TreeSet 底层是通过 TreeMap 来实现的,因此二者的实现方式完全一样.而 TreeMap 的实现 就是红黑树算法. TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证

转贴: wolfenstein工作室-eMule源代码学习心得

1, eMule源代码学习心得(1):eMule代码的总体风格和其它相关工程 eMule的官方首页上写着:2002年05月13日 一个叫做 Merkur 的人,他不满意原始eDonkey2000客户端并且坚信他能够做的更好,所以他开始制作.他聚集了其它开发人员在他的周围,并且eMule工程就此诞生. eMule是一个典型的MFC程序,它的图形界面等,已经和MFC紧紧融合到了一起.因此通常情况下它只能在windows平台下运行.有一些其它的工程,如aMule等,把它进行了移植,因此跨平台的功能要强

数据结构算法-关于求二叉树的最低公共结点

问题描述 关于求二叉树的最低公共结点 源代码: int hasnode(bitree tchar c){ if(!t) return 0; else if(t->data==c) return 1; return (hasnode(t->lchildc)||hasnode(t->rchildc));} bitree commonfather(bitree tchar c1char c2){ if(hasnode(tc1)==0||hasnode(tc2)==0) return 0; wh

C语言二叉树非递归遍历问题

问题描述 C语言二叉树非递归遍历问题 #include"stdio.h" #include"stdlib.h" #define OK 1 #define ERROR 0 #define OVERFLOW -1 typedef char TElemType; typedef struct BiTNode{ TElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; typedef int Stat

php查看网页源代码的方法

 这篇文章主要介绍了php查看网页源代码的方法,涉及php读取网页文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php查看网页源代码的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 <?php $url = "http://www.jb51.net"; $fp = @fopen($url, 'r') or die("Cannot Open $url via Get method"); wh

C#编写的windows计算器-源代码

window|源代码 选择自 CSPRO 的 Blog using System;using System.Drawing;using System.Windows;using System.Windows.Forms;using System.Collections;using System.ComponentModel;using System.Data; namespace comput{    /// <summary>    /// 这是一个计算器的简单实现.    /// <

二叉树遍历算法之一:前序遍历

递归实现前序遍历 二叉树的前序遍历是指从根节点出发,按照先根节点,再左子树,后右子树的方法遍历二叉树中的所有节点,使得每个节点都被访问一次. 当调用遍历算法的时候前序遍历的具体过程如下: 首先访问根节点,如果根节点不为空,执行输出语句,打印根节点的值. 如果左子树不为空,则访问根节点的左孩子,并输出根节点做孩子的值 继续访问根节点的左孩子的左孩子,如果不为空则继续输出该左孩子的值: 如果这时左孩子为空,说明该节点是叶子节点,则按照先左孩子后右孩子的访问方式访问其左右孩子,如果不为空就打印输出 左