#include<stdio.h>
#include<iostream>
#include<malloc.h>
typedef struct node{
int data;
struct node *lchild;
struct node *rchild;
}*BiTree;//此处*BiTree的作用与 typedef struct node *BiTree等价
int CreateTree(BiTree &T);//创建二叉树
int EmptyTree(BiTree T);//判断二叉树是否为空
int TreeDepth(BiTree T);//求树的深度
int search(BiTree T,int num);//在二叉树中查找节点
int QX(BiTree T);//前序遍历
int ZX(BiTree T);//中序遍历
int HX(BiTree T);//后序遍历
int b=0,c=0;
int main(){
//BiTree T作用和 struct node *T相同
int depth;
int num;
struct node *T;
CreateTree(T);
EmptyTree(T);
depth=TreeDepth(T);
printf("树的深度为%d\n",depth);
printf("请输入要查找的数:");
scanf("%d",&num);
search(T,num);
if(b==c) printf("没有找到节点\n");
printf("前序遍历:");
QX(T);
printf("\n");
printf("中序遍历:");
ZX(T);
printf("\n");
printf("后序遍历:");
HX(T);
system("pause");
return 0;
}
创建二叉树
int CreateTree(BiTree &T){
int a;
printf("请输入数值:");
scanf("%d",&a);
if(a==-1){
T=NULL;
return 0;//return的作用是用来终止函数,return在此处的作用可有可无
}
else{
T=(struct node *)malloc(sizeof(struct node));
T->data=a;
b++;
CreateTree(T->lchild);//递归
CreateTree(T->rchild);//递归
}
return 0;
}
判断二叉树是否为空
int EmptyTree(BiTree T){
if(T==NULL) printf("此二叉树为空\n");
if(T!=NULL) printf("此二叉树不为空\n");
return 0;
}
///判断树的深度
int TreeDepth(BiTree T){
int right,left;
if(!T) {
return 0;
}
else{
left=TreeDepth(T->lchild);
right=TreeDepth(T->rchild);
if(left>right)
return left+1;
else
return left+1;
}
}
前序遍历
int QX(BiTree T){
if(T){
printf("%d ",T->data);
QX(T->lchild);
QX(T->rchild);
return 0;
}
else
return 1;
}
中序遍历
int ZX(BiTree T){
if(T){
ZX(T->lchild);
printf("%d ",T->data);
ZX(T->rchild);
return 0;
}
else
return 1;
}
///后序遍历
int HX(BiTree T){
if(T){
HX(T->lchild);
HX(T->rchild);
printf("%d ",T->data);
return 0;
}
else
return 1;
}
/查找节点
int search(BiTree T,int num){
if(T){
if(T->data==num)
printf("找到节点\n");
else{
c++;
search(T->lchild,num);
search(T->rchild,num);
}
return 0;
}
else{
return 1;
}
}
#include<stdio.h>
#include<iostream>
#include<malloc.h>
typedef struct node{
int data;
struct node *lchild;
struct node *rchild;
}*BiTree;//此处*BiTree的作用与 typedef struct node *BiTree等价
int CreateTree(BiTree &T);//创建二叉树
int EmptyTree(BiTree T);//判断二叉树是否为空
int TreeDepth(BiTree T);//求树的深度
int search(BiTree T,int num);//在二叉树中查找节点
int QX(BiTree T);//前序遍历
int ZX(BiTree T);//中序遍历
int HX(BiTree T);//后序遍历
int b=0,c=0;
int main(){
//BiTree T作用和 struct node *T相同
int depth;
int num;
struct node *T;
CreateTree(T);
EmptyTree(T);
depth=TreeDepth(T);
printf("树的深度为%d\n",depth);
printf("请输入要查找的数:");
scanf("%d",&num);
search(T,num);
if(b==c) printf("没有找到节点\n");
printf("前序遍历:");
QX(T);
printf("\n");
printf("中序遍历:");
ZX(T);
printf("\n");
printf("后序遍历:");
HX(T);
system("pause");
return 0;
}
创建二叉树
int CreateTree(BiTree &T){
int a;
printf("请输入数值:");
scanf("%d",&a);
if(a==-1){
T=NULL;
return 0;//return的作用是用来终止函数,return在此处的作用可有可无
}
else{
T=(struct node *)malloc(sizeof(struct node));
T->data=a;
b++;
CreateTree(T->lchild);//递归
CreateTree(T->rchild);//递归
}
return 0;
}
判断二叉树是否为空
int EmptyTree(BiTree T){
if(T==NULL) printf("此二叉树为空\n");
if(T!=NULL) printf("此二叉树不为空\n");
return 0;
}
///判断树的深度
int TreeDepth(BiTree T){
int right,left;
if(!T) {
return 0;
}
else{
left=TreeDepth(T->lchild);
right=TreeDepth(T->rchild);
if(left>right)
return left+1;
else
return left+1;
}
}
前序遍历
int QX(BiTree T){
if(T){
printf("%d ",T->data);
QX(T->lchild);
QX(T->rchild);
return 0;
}
else
return 1;
}
中序遍历
int ZX(BiTree T){
if(T){
ZX(T->lchild);
printf("%d ",T->data);
ZX(T->rchild);
return 0;
}
else
return 1;
}
///后序遍历
int HX(BiTree T){
if(T){
HX(T->lchild);
HX(T->rchild);
printf("%d ",T->data);
return 0;
}
else
return 1;
}
/查找节点
int search(BiTree T,int num){
if(T){
if(T->data==num)
printf("找到节点\n");
else{
c++;
search(T->lchild,num);
search(T->rchild,num);
}
return 0;
}
else{
return 1;
}
}
二叉树的基本操作
最新推荐文章于 2022-11-11 21:52:14 发布