二叉树基本操作及各种遍历怎么运行才能有结果

#include
#include
#include
typedef int Status;
#define OK 1;
#define ERROR 0;
typedef struct BiTNode

{

char data;  //数据域;Type: 用户定义数据类型

struct BiTNode *Lchild;  //左指针域

struct BiTNode *Rchild;  //右指针域

} BiTNode, *BiTree;
Status IniBiTree(BiTree &T)
{
//构造空树
T = (BiTNode *)malloc(sizeof(BiTNode));
if (!T)return ERROR;//构造失败
T->Lchild = T->Rchild = NULL;
return OK;
}
void CreateBiTree(BiTree &T)
{
//按先序次序输入二叉树中结点的值(一个字符),#字符表示空数,
//构造二叉链表表示的二叉树T。
char ch;
scanf_s("%c",&ch,2);
if (ch == '#')T = NULL;
if (ch == '0')return;
else
{
T = (BiTNode *)malloc(sizeof(BiTNode));
if (!T) exit(OVERFLOW);//分配失败
T->data = ch;
CreateBiTree(T->Lchild);//构造左子树
CreateBiTree(T->Rchild);//构造右子树
}
}//CreateBiTree
Status IsEmpty(BiTree T)
{
if (T)return ERROR;//非空树
return OK;//空树
}
void ClearBiTree(BiTree &T)
{
if (T)
{
if(T->Lchild)
ClearBiTree(T->Lchild);//如果有左孩子
if (T->Rchild)//如果有右孩子
ClearBiTree(T->Rchild);
free(T);//释放结点
T = NULL;//根节点为空
}
}
char GetRoot(BiTree T)
{
if (!T) return 'E';//如果是空树
else return T->data;
}
int GetDepth(BiTree T)
{//求的树的深度
int i,j;//i,j分别用来记左子树和右子树
if (!T) return 0;
if (T->Lchild) i = GetDepth(T->Lchild);
else i=0;
if (T->Rchild) j = GetDepth(T->Rchild);
else j=0;
return i > j ? i + 1 : j + 1;

}
void PreOrderTraverse(BiTree T)
{//采用二叉链表存储结构
//先序遍历二叉树T的递归算法。
if (T == NULL)return;
printf("%c", T->data);
PreOrderTraverse(T->Lchild);//遍历左子树
PreOrderTraverse(T->Rchild);//遍历右子树
}//PreOrderTraverse
void InOrderTraverse(BiTree T)
{//采用二叉链表存储结构
//中序遍历二叉树T的递归算法。
if (T == NULL)return;
InOrderTraverse(T->Lchild);//遍历左子树
printf("%c", T->data);
InOrderTraverse(T->Rchild);//遍历右子树
}//InOrderTraverse
void PostOrderTraverse(BiTree T)
{//采用二叉链表存储结构
//后序遍历二叉树T的递归算法。
if (T == NULL)return;
printf("%c", T->data);
PostOrderTraverse(T->Lchild);//遍历左子树
PostOrderTraverse(T->Rchild);//遍历右子树
}//PostOrderTraverse
int main()
{
BiTree tree;
IniBiTree(tree);//初始化二叉树
CreateBiTree(tree);//创建二叉树
printf("\n前序遍历二叉树\n");
PreOrderTraverse(tree);//前序遍历二叉树
printf("\n中序遍历二叉树\n");
InOrderTraverse(tree);//中序遍历二叉树
printf("\n后序遍历二叉树\n");
PostOrderTraverse(tree);//后序遍历二叉树
system("pause");
return 0;
}

0

2个回答

你这个CreateBiTree不对
1.scanf_s("%c", &ch, 2);就很奇怪了,你是想把回车符一起扔掉?这样写根本达不到效果,需要用getchar()或者fflush(stdin)才行
2.还有之后的if (ch == '#')T = NULL;这里 应该应该少了return吧?
3.if (ch == '0')return;可以去掉
图片说明

 #include<stdio.h>
#include<string>
#include<iostream>
typedef int Status;
#define OK 1;
#define ERROR 0;
typedef struct BiTNode

{

    char data;  //数据域;Type: 用户定义数据类型

    struct BiTNode *Lchild;  //左指针域

    struct BiTNode *Rchild;  //右指针域

} BiTNode, *BiTree;
Status IniBiTree(BiTree &T)
{
    //构造空树
    T = (BiTNode *)malloc(sizeof(BiTNode));
    if (!T)return ERROR;//构造失败
    T->Lchild = T->Rchild = NULL;
    return OK;
}
void CreateBiTree(BiTree &T)
{
    //按先序次序输入二叉树中结点的值(一个字符),#字符表示空数,
    //构造二叉链表表示的二叉树T。
    char ch;
    scanf_s("%c", &ch, 1);
    getchar();
    if (ch == '#'){ T = NULL; return; }
    else
    {
        T = (BiTNode *)malloc(sizeof(BiTNode));
        if (!T) exit(OVERFLOW);//分配失败
        T->data = ch;
        CreateBiTree(T->Lchild);//构造左子树
        CreateBiTree(T->Rchild);//构造右子树
    }
}//CreateBiTree
Status IsEmpty(BiTree T)
{
    if (T)return ERROR;//非空树
    return OK;//空树
}
void ClearBiTree(BiTree &T)
{
    if (T)
    {
        if (T->Lchild)
            ClearBiTree(T->Lchild);//如果有左孩子
        if (T->Rchild)//如果有右孩子
            ClearBiTree(T->Rchild);
        free(T);//释放结点
        T = NULL;//根节点为空
    }
}
char GetRoot(BiTree T)
{
    if (!T) return 'E';//如果是空树
    else return T->data;
}
int GetDepth(BiTree T)
{//求的树的深度
    int i, j;//i,j分别用来记左子树和右子树
    if (!T) return 0;
    if (T->Lchild) i = GetDepth(T->Lchild);
    else i = 0;
    if (T->Rchild) j = GetDepth(T->Rchild);
    else j = 0;
    return i > j ? i + 1 : j + 1;

}
void PreOrderTraverse(BiTree T)
{//采用二叉链表存储结构
    //先序遍历二叉树T的递归算法。
    if (T == NULL)return;
    printf("%c", T->data);
    PreOrderTraverse(T->Lchild);//遍历左子树
    PreOrderTraverse(T->Rchild);//遍历右子树
}//PreOrderTraverse
void InOrderTraverse(BiTree T)
{//采用二叉链表存储结构
    //中序遍历二叉树T的递归算法。
    if (T == NULL)return;
    InOrderTraverse(T->Lchild);//遍历左子树
    printf("%c", T->data);
    InOrderTraverse(T->Rchild);//遍历右子树
}//InOrderTraverse
void PostOrderTraverse(BiTree T)
{//采用二叉链表存储结构
    //后序遍历二叉树T的递归算法。
    if (T == NULL)return;
    printf("%c", T->data);
    PostOrderTraverse(T->Lchild);//遍历左子树
    PostOrderTraverse(T->Rchild);//遍历右子树
}//PostOrderTraverse
int main()
{
    BiTree tree;
    IniBiTree(tree);//初始化二叉树
    CreateBiTree(tree);//创建二叉树
    printf("\n前序遍历二叉树\n");
    PreOrderTraverse(tree);//前序遍历二叉树
    printf("\n中序遍历二叉树\n");
    InOrderTraverse(tree);//中序遍历二叉树
    printf("\n后序遍历二叉树\n");
    PostOrderTraverse(tree);//后序遍历二叉树
    system("pause");
    return 0;
}
1

结构是对的,多调试调试吧

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
二叉树的遍历基本操作
树 一、树的存储方式 1、双亲表示法:用指针表示出每个节点的双亲(和自己的数据):根节点没有双亲,其他的节点都有自己的双亲) 2、孩子表示法:用指针指出每棵树的孩子节点,每个节点给出3个字段(数据,两棵子树)【节点字段为树的度加1】 3、双亲孩子表示法:将孩子表示法和双亲表示法结合在一起 4、孩子兄弟表示法:既表示出每一个节点第一个孩子节点,也表示出每个节点的下一个兄弟节点 二、二叉树...
二叉树的遍历及基本操作
        二叉树,顾名思义,是有每个结点有两个分支的树,我们将结点称为根节点,将它的两个分支称为它的左子树、右子树,所以我们用以下结构来定义二叉树的结构。typedef char TreeNodeType; typedef struct TreeNode//树的结点 { TreeNodeType data;//数据 struct TreeNode* lchild;//左子...
实验三 二叉树的基本操作(建立)及遍历
实验三 二叉树的基本操作(建立)及遍历 实验目的 1.学会实现二叉树结点结构和对二叉树的基本操作。 2.通过对二叉树遍历操作的实现,理解二叉树各种操作,学会利用递归方法编写对二叉树等类似递归数据结构进行处理的算法。 实验要求 1.认真阅读和掌握和本实验相关的教材内容。 2.编写完整程序完成下面的实验内容并上机运行。 实验内容 1.编写程序输入二叉树的结点个数和结点值,构造下图所示的二
二叉链表的基本操作
#include<iostream>using namespace std;struct node { node *lChild; node *rChild; char data; }; //先序递归创建树 node *createTree() { char ch; cin>>ch; node *root; if(ch=='#')
二叉树的基本操作及应用
BTree.h #ifndef __BTree_H__ #define __BTree_H__ #include&amp;lt;stdlib.h&amp;gt; #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;assert.h&amp;gt; typedef char DataType; typedef struct BTreeNode { DataType data; struc...
数据结构 二叉树基本操作
数据结构试验:二叉树基本操作 二叉树的各种遍历及求二叉树深度
数据结构 二叉树 遍历 源代码
数据结构二叉树的源代码包含二叉树的基本操作: 各种遍历,深度计算
二叉树的建立、各种遍历、深度结点计算的实现
数据结构对二叉树结构的C++代码实现,包含基本的建立二叉树,各种方式遍历二叉树,深度计算、结点个数计算等等
二叉树的建立以及三种遍历操作
      由二叉树结点的性质可以确定的是,二叉树结构相比普通的链表结点而复杂,需要通过其左/右指针访问其左/右子树结点。而在熟悉了二叉树的结构后,需要注意的是二叉树的建立以及遍历操作。而建立与遍历两种操作,需要利用的是递归的思想,即保持每一个子集函数操作与其父函数相同。     首先明确三个概念,前序,中序,后序。这三种概念主要是访问结点及其子树的方式区别,在二叉树的构造以及遍历操作之中均有应...
二叉树链式结构实现
#include "string.h" #include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE
线索二叉树的原理以及创建和遍历(c++)
这是一篇非常好的关于线索二叉树的文章,内容详细到位,叙述清晰。作者是以为很认真、信息的人,估计花了不少时间和精力,向作者致敬! 引用地址:http://waret.iteye.com/blog/709779 PROCEDURE INTHREAD(BT,h) IF BT != 0 THEN { INTHREAD(L(BT),h) I
二叉树的基本操作实现(建立、先序、中序、后序、层序)
[问题描述] 建立一棵二叉树,试编程实现二叉树的如下基本操作: 1. 按先序序列构造一棵二叉链表表示的二叉树T; 2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列;  [基本要求] 从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立), [测试数据] 如输入:ABC##DE#G##F###(其中#表示空格字符)则输出结果为: 先序...
设计程序实现二叉树结点的类型定义和对二叉树的基本操作
设计程序实现二叉树结点的类型定义和对二叉树的基本操作。该程序包括二叉树结构类型以及每一种操作的具体的函数定义和主函数。 1 按先序次序建立一个二叉树 2按(A:先序 B:中序 C:后序 )遍历输出二叉树的所有结点
二叉链表的存储结构和基本操作(各种遍历、求树深度、求树叶个数)
1.二叉树的定义及性质 二叉树是一种树状结构,它的特点是每个节点至多只能有两棵子树,并且二叉树的子树有左右之分,其次序不能任意调换。 二叉树具有以下重要性质: 性质 1 在二叉树的第i层上至多有2^(i-1)个节点。 性质 2 深度为k的二叉树至多有2^k-1个节点。 性质 3 对于任何一棵二叉树T,如果其终端节点数为n0,度为2的节点数n2,则n0=n2+1。 2.二
二叉树基本操作
二叉树基本操作,主要有树的建成,各种遍历,以及判断
二叉树的链式存储结构及基本操作
#include #include #include/*malloc()等*/ #include/*INT_MAX等*/ #include/*EOF(=^Z或F6),NULL*/ #include/*atoi()*/ #include/*eof()*/ #include/*floor(),ceil(),abs()*/ #include/*exit()*/ /*函数结果状态代码*/ #define
如何遍历一棵二叉树?
二叉树的遍历分为三种:前序遍历 中序遍历 后序遍历 前序遍历:按照“根左右”,先遍历根节点,再遍历左子树 ,再遍历右子树 中序遍历:按照“左根右“,先遍历左子树,再遍历根节点,最后遍历右子树 后续遍历:按照“左右根”,先遍历左子树,再遍历右子树,最后遍历根节点 其中前,后,中指的是每次遍历时候的根节点被遍历的顺序 ============ 二叉树遍历的java实现 package 树...
数据结构实验-二叉树的基本操作
一、问题描述 运用二叉链表实现二叉树的基本操作,包括:创建二叉树的存储结构、复制已有的二叉树、计算已有的二叉树的深度、先根序序列、中根序序列、后根序序列等。 输入格式:AB#C##D## 二、实验目的 掌握二叉链表及二叉树的基本操作。 三、实验内容及要求 1、构造二叉树的二叉链表数据结构。 2、实现二叉树的创建、复制、计算二叉树的深度、先根序序列、中根序序列、后根序序列等操作。
二叉树的基本操作 遍历 叶子 层数
二叉树的操作 二叉树的基本操作 遍历 叶子 层数
二叉树的基本操作及编程题总结(C++)
**二叉树编程题万变不离其宗在于对递归的理解和使用要弄懂用好递归 重要的在于一下几条:1.搞清楚函数递归调用栈帧的变化 特别是二叉递归时的栈帧变化2.搞清楚各个函数参数 传值和传引用 的函数参数在递归调用时值的变化。 本文中不加注明 所说的二叉树都是普通二叉树1.定义并构建一颗二叉树对于一颗普通二叉树的节点 至少要定义出他的值域 和指向其左右子树的左右指针域。 并定义出节点的构造函数 该函
【数据结构】二叉树的链式储存以及基本操作
#include &amp;lt;bits/stdc++.h&amp;gt; #define MAXSIZI 10 /* 1、以二叉链表表示二叉树,建立一棵二叉树 2、输出二叉树的中序遍历结果 3、输出二叉树的前序遍历结果 4、输出二叉树的后序遍历结果 5、计算二叉树的深度 6、统计二叉树的结点个数 7、统计二叉树的叶结点个数; */ using namespace std; //以二叉链表表示二叉树,建立一棵二...
二叉树各种操作的总结
求二叉树中的节点个数 求二叉树中叶子节点的个数 求二叉树的深度 求二叉树第K层的节点个数 递归遍历前序中序后序 非递归遍历前序中序后序层序 1 前序遍历 2 中序遍历 3 后序遍历 4 层序遍历 将二叉查找树变为有序的双向链表 判断两棵二叉树是否结构相同 判断二叉树是不是平衡二叉树 判断二叉树是否是搜索二叉树 求二叉树中两个节点的最低公共祖先节点 求二叉树中节点的最大距离 由前序遍历序列和中序遍历序列重建二叉树
严蔚敏 数据结构 二叉树链式存储结构 遍历等操作
课本 《数据结构(C语言版)(第2版)》 严蔚敏版 树结构的学习。 编译环境:DEV C++ 文件格式为 cpp(c++文件类型),前者的引用函数,在 C 的情况下没完成。 实现: 二叉树的先序遍历创建,三种遍历方法,叶子节点的查询等。 参考 code:  #include #include #define Shyazhut 0//条件启用求叶子节点的函数:0 不使用 c
二叉树的基本操作精集(创建、遍历、求深度结点以及叶子结点个数)
对于二叉树的操作一般的我们使用递归的方法,因为在二叉树中每一个子树又是一颗二叉树。 这篇代码主要是演示了二叉树的以下操作 二叉树的创建 二叉树的三种遍历 求解二叉树的高度 求解指定层数的结点个数 求解二叉树的叶子结点个数 /********************************************************* - Copyright (C): 2016 - File
二叉树的建立与基本操作
编写程序实现二叉树的如下操作: 1) 建立二叉链表 2) 二叉树的先序、中序、后序遍历 3) 求解二叉树的叶子结点个数 4) 将二叉树中所有结点的左、右子树相互交换 输入:   扩展二叉树先序序列:ab#d##ce###。其中#代表空指针。 输出:   二叉树的凹入表示   二叉树的先序序列、中序序列、后序序列   二叉树叶子结点个数   左、右子树相互交换后的二叉树的凹入表示   左、右子树相互交换后的二叉树的先序序列、中序序列、后序序列。 说明:   在输出凹入表示的二叉树时,先输出根结点,然后依次输出左右子树,上下层结点之间相隔 3 个空格。
PHP数据结构之九 PHP储存二叉树,二叉树的创建与二叉树的基本操作 遍历二叉树算法
二叉树的创建及基本操作 PHP储存二叉树,二叉树的创建与二叉树的基本操作 遍历二叉树算法 /** *二叉树的创建及基本操作 * *1.构造方法,初始化建立二叉树 *2.按先序遍历方式建立二叉树 *3.按先序遍历二叉树 *4.先序遍历的非递归算法 *5.中序遍历二叉树 *6.中序遍历的非递归算法 *7.后序遍历二叉树 *8.后序遍历非递归算法 *9.层次遍历二叉树 *
二叉树的基本操作 C语言
二叉树的各项基本操作C语言 struct tree_node{ char id; struct tree_node *left; struct tree_node *right; }; typedef struct tree_node TreeNode; typedef struct tree_no
使用C++链表实现二叉树的存储及基本操作
使用C++语言,结合单链表的基本操作,实现二叉树的存储,前序、种序、后序遍历及其他基本操作
二叉树的基本操作(严蔚敏)
二叉树是一种树形结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2 的结点),并且,二叉树的子树有左右之分,其次序不能颠倒。 二叉树的链表 。 typedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild; /* 左右孩子指针 */ }BiTNode,*BiTree;
二叉树的建立与遍历
按先序序列构造一棵二叉链表表示的二叉树T,并输出该T的中序遍历序列。实现提示: 1) 按先序序列建立一棵二叉树时,先构造根结点,再构造根的左子树,然后构造右子树;每棵子树又都是二叉树,所以构造一棵子树的过程与构造整棵二叉树的过程完全相同(采用递归形式直到叶子结点为止)。 2) 先序序列的输入:从键盘输入任意一棵二叉树的先序序列,用#代表空指针,如下图所示的二叉树,输入的先序序列为:ab#d##c##)。
二叉树三种遍历六种实现
二叉树三种遍历六种实现
数据结构(C语言实现) - 二叉树的基本操作(建立,遍历,结点数,叶子结点数,高度,按树状打印,输出叶子结点等)
通常,对二叉树的操作都是利用二叉链表进行的。 二叉链表:包括三个域-数据域,左孩子,右孩子的结点结构的二叉树存储结点。 二叉链表的存储结构如下: typedef char DataType; typedef struct node /*二叉树的存储结构*/ { DataType data; struct node *Lchild; struct node *Rchild;
【代码】C++实现二叉树基本操作及测试用例
二叉树是一种常见的数据结构,这里我们需要要注意的是,二叉树的非递归的遍历。    先序遍历,中序遍历,后序遍历    这三种遍历,如果用非递归的方式实现,我们则需要借助栈这个结构,首先我们需要遍历所有左子树的左节点。进行压栈,完成压栈之后,根据不同的需求,判断是否该继续访问或者弹出亦或者是压入该节点的右子树。    层序遍历    不同于其他的遍历方式,层序遍历是以根节点为开始,依次向下,每层从左
c语言实现二叉树的基本操作--二叉链表存储
利用二叉链表存储,并且利用递归的方法实现二叉树的遍历(前序遍历、中序遍历和后续遍历)操作。 c语言具体实现代码如下: #include #include #include typedef int ElemType;//数据类型 //定义二叉树结构,与单链表相似,多了一个右孩子结点 typedef struct BiTNode { ElemType data; struct BiTNode
数据结构-二叉树的基本操作
目标效果: dsp0603.cpp页面; #include #include #define ElemType char //二叉树中数据元素类型 #include "bintree.h" //二叉树的实现 //打印结点数据(作为Visit函数) Status print(char); //计算二叉树中叶子结点的个数 int LeafCount(BiTree bt
二叉树的三种遍历
用VC运行,可以查看二叉树在三种遍历方式下的结果
二叉树的实现各种遍历算法
二叉树的实现各种遍历算法,插入删除成员函数非常全。二叉树的实现各种遍历算法,插入删除成员函数非常全
数据结构与算法题目集(中文)4-9 二叉树的遍历 (25分)
void InorderTraversal(BinTree BT) { if (BT) { InorderTraversal(BT->Left); printf(" %c", BT->Data); InorderTraversal(BT->Right); } } void PreorderTraversal(BinTree BT) { if (BT) { printf("
二叉树中如何根据已知的两种遍历方法,求出第三种遍历的结果
此题的答案是B。详细解析如下:知道先序是根-&amp;gt;左-&amp;gt;右,中序是左-&amp;gt;根-&amp;gt;右,后序是左-&amp;gt;右-&amp;gt;根,但是以前一直没整明白怎么根据已知两个序遍历求第三种遍历(前提是一定要知道中序遍历),今天做这个题的时候忽然脑袋开窍了。最重要的一点就是:找到根-&amp;gt;找到左右子树一直重复这个操作,直到最后一个子节点。先序遍历的结果是ABDEFC,根据先序得到根节点是A.中序遍历...
熟练掌握树的基本概念、结构特点并且熟悉各种存储结构的特性。
一、 实验目的 1、 熟练掌握树的基本概念、结构特点并且熟悉各种存储结构的特性。 2、 重点掌握二叉树的生成、遍历及求深度等算法。 3、 掌握赫夫曼树的含义及其应用。 二、 实验要求 1、 从终端读入要编码的字符串,对所输入的字符串进行频率统计并建立哈夫曼树。 2、 输出每个字符的编码。 3、 根据已有的各个字符的编码,输入一段正确的电文,然后对输入的电文进行译码。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 怎么才能做产品经理 python基本操作教程