二叉树的建立

#include "stdio.h"

#include "string.h"

#include "BiTNode.h"

//先序建立二叉树

BiTree ProCreate(BiTree T)

{

char ch;

scanf("%c", &ch);

if(ch == ‘#‘)

{

T = NULL;

return NULL;

}

else

{

T = (BiTNode *)malloc(sizeof(BiTNode));

if(!T)

{

printf("Error!");

return NULL;

}

T->data = ch;

T->lchild = ProCreate(T->lchild);

T->rchild = ProCreate(T->rchild);

}

return T;

}

//先序遍历二叉树

void Preorder(BiTree T)

{

if(T)

{

printf("%c", T->data);

Preorder(T->lchild);

Preorder(T->rchild);

}

}

//中序遍历二叉树

void Inorder(BiTree T)

{

if(T)

{

Inorder(T->lchild);

printf("%c",T->data);

Inorder(T->rchild);

}

}

//后序遍历二叉树

void Postorder(BiTree T)

{

if(T)

{

Postorder(T->lchild);

Postorder(T->rchild);

printf("%c",T->data);

}

}

//求叶子节点的个数

int Sumleaf(BiTree T)

{

int sum = 0, m, n;

if(T)

{

if((!T->lchild) && (!T->rchild))

sum ++;

m = Sumleaf(T->lchild);

sum += m;

n = Sumleaf(T->rchild);

sum += n;

}

return sum;

}

//求二叉树的深度

int Depth(BiTree T)

{

int dep = 0, depl, depr;

if(!T) dep = 0;

else

{

depl=Depth(T->lchild);

depr=Depth(T->rchild);

dep=1+(depl>depr?depl:depr);

}

return dep;

}

int main()

{

BiTree T;

int sum, dep;

printf("先序创建二叉树,请输入序列,空使用#代替 \n");

T = ProCreate(T);

printf("先序遍历的结果: ");

Preorder(T);

printf("\n中序遍历的结果: ");

Inorder(T);

printf("\n后序遍历的结果: ");

Postorder(T);

printf("\n叶子个数: ");

sum=Sumleaf(T);

printf("%d",sum);

dep=Depth(T);

printf("\n深度为:%d \n",dep);

return 0;

}

BiTNode.h的内容

#ifndef BITNODE_H_INCLUDED

#define BITNODE_H_INCLUDED

#define ElemType char

//定义数据结构

typedef struct BiTNode

{

ElemType data;

struct BiTNode *lchild, *rchild;

}BiTNode,*BiTree;

#endif // BITNODE_H_INCLUDED

时间: 2024-11-10 23:58:12

二叉树的建立的相关文章

二叉树的建立与先序遍历

// -------------------------// 二叉树的建立与先序遍历// ------------------------ #include <iostream>#include <malloc.h>using namespace std; typedef struct BiTreeNode { char elem; struct BiTreeNode *lchild, *rchild;}BiTreeNode,*BiTree; void CreatBiTree(Bi

20140510 二叉树的建立 先序 后序 中序 比较

#include<stdio.h> #include<malloc.h> typedef struct node { int data; struct node *lchild,*rchild; }; node * create()//先序建立二叉树,根左右 { int x=0; node *t; printf(" input data:"); scanf("%d",&x); if(x==0) t=NULL; else { t=(no

12.遍历二叉树与二叉树的建立

一.遍历二叉树 1.定义 二叉树的遍历(travering binary tree)是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次. 2.前序遍历 (1)规则:若二叉树为空,则空操作返回.否则,先访问根结点,然后前序遍历左子树,再前序遍历右子树. (2)实例 前序遍历结果为:A BDGH CEIF 分析:当最先访问根结点后,然后前序遍历左子树.当访问根的左子树时,这里"前序遍历"即我们将B假设为左子树的根来遍历. (3)算法 从二叉树定义

C语言二叉树的建立与遍历

二叉树的建立和遍历都要用到递归,先暂时保存一下代码,其中主要是理解递归的思想,其它的就都好理解了.这里是三种遍历方式,其实理解一种,其它的几个就都理解了,就是打印出来的顺序不一样而已.建立和遍历的方式差不多.也分好几种方式建立,这里 就写一种,就是先序建立 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct TreeNode{ 5 char ch; 6 struct TreeNode *lchild, *rch

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

如图: 代码: #include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; char ch; typedef struct BinNode { char data; struct BinNode *lchild,*rchild; }BinNode,*BinTree; //二叉树链式存储结构 void CreateBin

二叉树的建立方法总结

之前已经介绍了二叉树的四种遍历(如果不熟悉请戳我),下面介绍一些二叉树的建立方式.首先需要明确的是,由于二叉树的定义是递归的,所以用递归的思想建立二叉树是很自然的想法. 1. 交互式问答方式 这种方式是最直接的方式,就是先询问用户根节点是谁,然后每次都询问用户某个节点的左孩子是谁,右孩子是谁.代码如下(其中字符'#'代表空节点): #include <cstdio> #include <cstdlib> using namespace std; typedef struct BTN

C++ 二叉树的建立与遍历

重温了一下二叉树这个结构,以前上课的时候都是感觉懂了,具体实现还没有动手写过.主要写了二叉树的建立,递归遍历以及深度,根节点等方法. //树节点的头文件 #ifndef BinTreeNode_H_#define BinTreeNode_H_#define NULL 0class BinTreeNode{public: char data; BinTreeNode* leftChild; //左子树 BinTreeNode* rightChild;//右子树 public: BinTreeNod

二叉树的建立与遍历(山东理工OJ)

数据结构实验之二叉树的建立与遍历 题目描述 已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点).请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度. 输入 输入一个长度小于50个字符的字符串. 输出 输出共有4行: 第1行输出中序遍历序列: 第2行输出后序遍历序列: 第3行输出叶子节点个数: 第4行输出二叉树深度. 示例输入 abc,,de,g,,f,,, 示例输出 cbegdfa cgefdba 3 5 #include <iost

C++实现二叉树的建立和三种递归遍历

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 二叉树是一种常见的数据结构,二叉树的遍历也是家常便饭的事了,这里仅仅写出一个完整的可以运行的C++代码来随便建立一个如下图所示的二叉树,建一棵二叉树是实现二叉树各种操作的基础,下面的程序也很简单,这只是二叉树练习的开始,以后的博文中,将会紧紧围绕这棵二叉树练习更多的操作:如求二叉树的大小,二叉树的深度,翻转二叉树...,这里只是基础中的基础,只是为以后的学习做铺垫. 下面给出C++代码,代码的功能包括: 1.建立如上图所示的简单的二叉树. 2.

二叉树的建立(前序遍历法)

参考<大话数据结构>P187~188——二叉树的建立. 举个简单的例子: 代码和解释如下(VS2012测试通过): 1 #include <iostream> 2 using namespace std; 3 4 //二叉树的二叉链表结点结构定义 5 typedef struct BiTNode 6 { 7 char data; 8 struct BiTNode *lchild,*rchild; 9 }BiTNode; 10 11 //输入前序遍历,创建二叉树 12 //这里输入A