二叉树的建立和基本操作<一>

原创 2015年07月08日 22:57:54

好久没有写博客了,期末考试和课程设计让我似乎快忘记了我是一名考研党,最近事情都弄完了,可以安心准备考研了。

考研进行时——二叉树的。

#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct BT
{
	ElemType data;
	struct BT *lch,*rch;
}BT;

BT * CreateBT();            //先序建立二叉树
void preorder(BT *T);       //二叉树的先序遍历
void inorder(BT *T);        //二叉树的先序遍历
void postorder(BT *T);      //二叉树的先序遍历
int leafnum(BT *T);         //求二叉树的叶子节点
int Nodenum(BT *T);         //求二叉树的节点总数
int depth(BT *T);           //求二叉树的深度
int main()
{
	BT *T=NULL;
	printf("请输入要创建的树:");
	T=CreateBT();
	printf("\n前序遍历序列: ");
	preorder(T);
	printf("\n中序遍历序列: ");
	inorder(T);
	printf("\n后序遍历序列: ");
	postorder(T);
	printf("\n树中叶子节点的个数是: ");
    printf("%d",leafnum(T));
    printf("\n树中总的节点的个数是: ");
    printf("%d",Nodenum(T));
    printf("\n树的深度是:");
    printf("%d",depth(T));
	return 0;
}
BT * CreateBT()     
{
	BT *t;
	char c;
	scanf("%c",&c);
	if(c=='#')t=NULL;
	else
	{
	    t=(BT*)malloc(sizeof(BT));
        t->data=c;
        t->lch=CreateBT();
        t->rch=CreateBT();
	}
	return t;
}
void preorder(BT *T)
{
    if(T==NULL)return;
    else
    {
        printf("%c ",T->data);
        preorder(T->lch);
        preorder(T->rch);
    }
}
void inorder(BT *T)
{
     if(T==NULL)return;
    else
    {
        inorder(T->lch);
        printf("%c ",T->data);
        inorder(T->rch);
    }
}
void postorder(BT *T)
{
     if(T==NULL)return;
    else
    {
        postorder(T->lch);
        postorder(T->rch);
        printf("%c ",T->data);
    }
}
int leafnum(BT *T)
{
    if(T==NULL)
        return 0;
    if(T->lch==NULL&&T->rch==NULL)
        return 1;
        return leafnum(T->lch)+leafnum(T->rch);
}
int  Nodenum(BT *T)
{
    if(T==NULL )
        return 0;
      else
        return  Nodenum(T->lch)+Nodenum(T->rch)+1;
}
int depth(BT *T)
{
    int dep1,dep2;
    if(T==NULL)return 0;
    else
    {
        return depth(T->lch)>depth(T->rch)?depth(T->lch)+1:depth(T->rch)+1;
    }
}
运行结果:


该树的原型是:



[数据结构] 二叉树的建立及其基本操作

如图: 代码:   #include #include #include #include using namespace std; char ch; typedef struct Bi...
  • sr19930829
  • sr19930829
  • 2014年05月28日 19:16
  • 2745

实验三 二叉树的基本操作(建立)及遍历

实验三 二叉树的基本操作(建立)及遍历 实验目的 1.学会实现二叉树结点结构和对二叉树的基本操作。 2.通过对二叉树遍历操作的实现,理解二叉树各种操作,学会利用递归方法编写对二叉树等类似递归数据...
  • qq_26525215
  • qq_26525215
  • 2015年11月02日 21:59
  • 1901

二叉树的定义及基本操作

(1)定义二叉树的链式存储结构; (2)建立一颗二叉链表表示的二叉树; (3)对其进行前序,中序(非递归),后序输出。 (4)统计二叉树中叶子结点个数和度为2的结点个数。         ...
  • Best_CXY
  • Best_CXY
  • 2015年12月28日 22:24
  • 1101

10. 二叉树的建立与基本操作

10. 二叉树的建立与基本操作 成绩 10 开启时间 2014年11月14日 Friday 14:00 折扣 0.8 折扣时间 ...
  • liuyi005
  • liuyi005
  • 2014年12月10日 23:29
  • 1171

c++学习笔记—二叉树基本操作的实现

用c++语言实现的二叉树基本操作,包括二叉树的创建、二叉树的遍历(包括前序、中序、后序递归和非递归算法)、求二叉树高度,计数叶子节点数、计数度为1的节点数等基本操作。 IDE:vs2013 具体实...
  • xujian_2014
  • xujian_2014
  • 2015年01月15日 17:05
  • 1447

二叉树的基本操作 C语言

二叉树的各项基本操作C语言 struct tree_node{ char id; struct tree_node...
  • x__016Meliorem
  • x__016Meliorem
  • 2016年11月07日 09:11
  • 2754

递归创建二叉树以及一些基本操作

递归创建二叉树以及一些基本操作基本内容 二叉树的基本概念和遍历方式 使用递归创建一个简单的二叉树 二叉树使用递归遍历时的调用栈帧 实现代码 一些基本操作的递归实现 一、一些基本的东西首先我们要明确,二...
  • juxin960811
  • juxin960811
  • 2017年05月27日 20:08
  • 1026

先序遍历建立并输出二叉树(递归算法)

//代码如下:#include#includetypedef struct Node //二叉树结构定义{ char data; struct Node *lchild; struc...
  • u010660346
  • u010660346
  • 2013年11月22日 11:35
  • 2450

笔记(二叉树堆栈实现)

/* prime : 素数、质数 Get all the primes less than a known number N. */ //main #include #include ...
  • xyb890826
  • xyb890826
  • 2014年09月12日 09:22
  • 812

Java实现二叉树及相关遍历方式

Java实现二叉树及相关遍历方式 在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。 二叉树常被...
  • qiu_11
  • qiu_11
  • 2015年04月02日 12:17
  • 4119
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树的建立和基本操作<一>
举报原因:
原因补充:

(最多只允许输入30个字)