#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define True 1
// 定义二叉树的节点类型
typedef struct BiTNode{
char data;
struct BiTNode *lchild; // 定义节点的左孩子指针,有孩子指针
struct BiTNode *rchild;
}BiTNode,*BiTree; //先序遍历构造二叉链表表示对二叉树T int CreateBiTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
fflush(stdin); // 对键盘缓冲区的处理
if(ch=='#'){ //如果输入#,创建空节点
T=NULL;
}else{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode)))){ //申请根节点的空间
printf("申请节点空间失败!!");
exit(OVERFLOW);
}else{
T->data=ch; //生成根节点
CreateBiTree(T->lchild); //构建左子树
CreateBiTree(T->rchild); //构建右子树
}
return OK;
}
return ERROR;
}
//先序遍历二叉树
int DLR(BiTree T)
{ if(T!=NULL) // 如果树不为空
{
printf("%c\n",T->data);
DLR(T->lchild); // 递归遍历
DLR(T->rchild);
}else{
return ERROR; //树为空
}
return OK; // 遍历成功
} //中序遍历二叉树
int LDR(BiTree T)
{ if(T!=NULL)
{
LDR(T->lchild); // 递归遍历
printf("%c\n",T->data);
LDR(T->rchild);
}else{
return ERROR; //树为空
}
return OK; // 遍历成功
} //后序遍历二叉树
int LRD(BiTree T)
{
if(T!=NULL)
{
LRD(T->lchild); // 递归遍历
LRD(T->rchild);
printf("%c\n",T->data);
}else{
return ERROR; //树为空
}
return OK; // 遍历成功
}
// 树的叶子数
void yezi(BiTree T){ if(T!=NULL){
if(!T->lchild&&!T->rchild){ printf("%c\n",T->data); // 打印叶子节点
}
yezi(T->lchild);
yezi(T->rchild);
} }
// 树的深度
int shendu(BiTree T){
int h=,h1,h2;
if(T==NULL)
return h;
else{
h1=shendu(T->lchild);
h2=shendu(T->rchild);
if(h1>=h2) // 最后加的数为树的最深
h=h1+;
else
h=h2+;
}
return h;
} void OperateMenu()
{ printf("\n--------------请选择元素处理方式---------\n\n");
printf("\n注:请输入数字\n");
printf("0>:退出操作\n");
printf("1>:先序遍历二叉树\n");
printf("2>:中序遍历二叉树\n");
printf("3>:后序遍历二叉树\n");
printf("4>:树的叶子节点\n");
printf("5>:树的深度\n");
printf("请选择对元素的处理:"); } void zushi(){
printf("注:此过程为二叉树的建立及其对其的相关操作\n\t以下为树的大致模型\t\n"); printf(" 1 \n");
printf(" / \\ \n");
printf(" 2 3 \n");
printf(" / \\ / \\ \n");
printf(" # # # # \n");
printf("\n 注!!!楼上输入 # 表示无孩子为空\n故输入序列为12##3###\n");
printf("实际形成序列形成的树为为:\n");
printf(" 1 \n");
printf(" / \\ \n");
printf(" 2 3 \n");
}
int main(){
int w=,k,n,boo=;
BiTree T;
printf("请用户选择创建二叉树或退出程序:\n\n");
printf("创建二叉树请输入:'1'\n\n");
printf("退出请选择'0'或 其它!!\n\n");
printf("请选择:");
scanf("%d",&w);
if(w==){
zushi();
printf("\n请输入树节点元素(请回车输入下一个数):\n");
fflush(stdin);
boo=CreateBiTree(T);
if(!boo){
//printf("\n构建成功!!\n");
while(!boo){
printf("\n构建树为空树,请重新构建:");
printf("\n请输入树节点元素(请回车输入下一个数):\n");
boo=CreateBiTree(T);
}
}else{
printf("\n构建成功!!\n");
} OperateMenu();
scanf("%d",&k);
while(k){
switch(k){
case :break;
case :
printf("先序遍历结果为:\n");
boo=DLR(T);
if(boo)
printf("\n先序遍历成功!!\n");
else
printf("\n先序遍历失败!!\n");
break;
case :
printf("中序遍历结果为:\n");
boo=LDR(T);
if(boo)
printf("\n中序遍历成功!!\n");
else
printf("\n中序遍历失败!!\n");
break;
case :
printf("后序遍历结果为:\n");
boo=LRD(T);
if(boo)
printf("\n后序遍历成功!!\n");
else
printf("\n后序遍历失败!!\n");
break;
case :
printf("其中是叶子节点的是:\n");
yezi(T);
break;
case :n=shendu(T);
printf("树的深度为:%d",n);
break; }
OperateMenu();
scanf("%d",&k);
} }
return OK;
}

c_数据结构_二叉树的遍历实现的更多相关文章

  1. 算法与数据结构(三) 二叉树的遍历及其线索化(Swift版)

    前面两篇博客介绍了线性表的顺序存储与链式存储以及对应的操作,并且还聊了栈与队列的相关内容.本篇博客我们就继续聊数据结构的相关东西,并且所涉及的相关Demo依然使用面向对象语言Swift来表示.本篇博客 ...

  2. 【PHP数据结构】二叉树的遍历及逻辑操作

    上篇文章我们讲了许多理论方面的知识,虽说很枯燥,但那些都是我们今天学习的前提,一会看代码的时候你就会发现这些理论知识是多么地重要了.首先,我们还是要说明一下,我们学习的主要内容是二叉树,因为二叉树是最 ...

  3. 【数据结构】二叉树的遍历(前、中、后序及层次遍历)及leetcode107题python实现

    文章目录 二叉树及遍历 二叉树概念 二叉树的遍历及python实现 二叉树的遍历 python实现 leetcode107题python实现 题目描述 python实现 二叉树及遍历 二叉树概念 二叉 ...

  4. C_数据结构_链式二叉树

    # include <stdio.h> # include <malloc.h> struct BTNode { int data; struct BTNode * pLchi ...

  5. c_数据结构_图_邻接表

    课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...

  6. python数据结构之二叉树的遍历实例

    遍历方案   从二叉树的递归定义可知,一棵非空的二叉树由根结点及左.右子树这三个基本部分组成.因此,在任一给定结点上,可以按某种次序执行三个操作:   1).访问结点本身(N)   2).遍历该结点的 ...

  7. C_数据结构_链表的链式实现

    传统的链表不能实现数据和链表的分离,一旦数据改变则链表就不能用了,就要重新开发. 如上说示:外层是Teacher,里面小的是node. #ifndef _MYLINKLIST_H_ #define _ ...

  8. C_数据结构_循环队列

    # include <stdio.h> # include <malloc.h> typedef struct Queue { int * pBase; int front; ...

  9. C_数据结构_栈

    # include <stdio.h> # include <malloc.h> # include <stdlib.h> typedef struct Node ...

随机推荐

  1. html select美化模拟jquery插件select2.js

    代码展示:http://www.51xuediannao.com/demo.php 代码说明: select2.js是一个html select美化模拟类jquery插件,但是select2.js又远 ...

  2. Mysql 命令行下建立存储过程

    建立存储过程的sql如下: CREATE PROCEDURE  proc_variable () BEGIN DECLARE dec_var_ VARCHAR(100); DECLARE rep_nu ...

  3. 第一周任务Largest Submatrix of All 1’s

    Largest Submatrix of All 1’s Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 9512   Ac ...

  4. troff - groff 文档排版系统的 troff 处理器

    总览 SYNOPSIS troff [ -abcivzCERU ] [ -d cs ] [ -f fam ] [ -F dir ] [ -m name ] [ -M dir ] [ -n num ] ...

  5. uname - 显示输出系统信息

    总览 uname [OPTION]... 描述 显示相应的系统信息. 没有指定选项时,同 -s. -a, --all 显示所有的信息 -m, --machine 显示机器(硬件)类型 -n, --no ...

  6. 类 __init__的注意事项

    class Dog():  class类 后面的ClassName类名第一个字母一定要大写. def __init__(self,name,age):    注意init前后是英文格式下,前后都是两道 ...

  7. UVA11427 Expect the Expected 概率dp+全概率公式

    题目传送门 题意:小明每晚都玩游戏,每一盘赢的概率都是p,如果第一盘就赢了,那么就去睡觉,第二天继续玩:否则继续玩,玩到赢的比例大于p才去睡:如果一直玩了n盘还没完成,就再也不玩了:问他玩游戏天数的期 ...

  8. pymupdf 修改pdf文件

    安装: sudo pip install pymupdf==1.16.0 引入使用: import  fitz 可以插入文字.图片.... 帮助文档: PyMuPDF documentation ht ...

  9. on windows in superset sql lab error "module object has no attribute sigalrm"

    改下  utils.py   文件 It works after doing the following change (sorry for the massed up alignment, prob ...

  10. 解析Mybatis入门第一天

    MyBatis是一个基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单. MyBatis通过XML或者注解的方式将要执行的各 ...