小鱼干~ 2021-10-30 20:55 采纳率: 80%
浏览 17
已结题

为什么输入一些序列之后,没有结果出现呢?


#include<stdio.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#include<iostream>
using namespace std;
typedef int Status;
typedef char ElemType;
typedef struct BiTNode//采用二叉链表结构
{
ElemType data;//结点元素值
struct BiTNode *lchild,*rchild;//左右孩子
}BiTNode,*BiTree;
BiTree CreateBiTree(BiTree &T)//先序创建一个二叉树 T
{// 按先序次序输入二叉树中结点的值(一个字符),'#'字符表示空树,// 构造二叉链表表示的二叉树 T。
char ch;
scanf("%c",&ch);
if(ch=='#')//若输入字符为#,则不创建新结点
T=NULL;
else//若输入字符不为#,则创建一个新结点
{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))//开辟新结点空间
return ERROR;
T->data=ch;//生成根结点,将输入的值存入新结点数据域
CreateBiTree(T->lchild);//创建左子树
CreateBiTree(T->rchild);//创建右子树
}
return T;
}
void Copy(BiTree OldT, BiTree &NewT)//(3)复制二叉树;
{
if(OldT==NULL )
{ //如果是空树,递归结束
NewT=NULL;
return;
}
else
{
NewT=new BiTNode;
NewT->data= OldT->data; //复制根结点
Copy(OldT->lchild, NewT->lchild); //递归复制左子树
Copy(OldT->rchild, NewT->rchild); //递归复制右子树
} //else
}
Status Visit(ElemType e)//若 e 值不为#,则屏幕输出 e 值
{// 输出元素 e 的值
if(e!='#')
{
printf("%c",e);
return OK;
}
else
return FALSE;
}
Status PreOrderTraverse(BiTree T)//递归先序遍历树 T
{
if(T)//当 T 不为空
{        cout<<T->data;
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);//补充代码,可能不止一行
}
else
return OK;
}
Status InOrderTraverse(BiTree T)//递归中序遍历树 T
{
if(T)//当 T 不为空
{       
        InOrderTraverse(T->lchild);
        cout<<T->data;
        InOrderTraverse(T->rchild);//补充代码,可能不止一行
}
else
return OK;
}
Status PostOrderTraverse(BiTree T)//递归后序遍历树 T
{
if(T)
{       PostOrderTraverse(T->lchild);
        PostOrderTraverse(T->rchild);
        cout<<T->data;//补充代码,可能不止一行
}
else
return OK;
}
int Depth(BiTree T)//(4)计算二叉树的深度;
{
int m,n;
if(T == NULL ) return 0; //如果是空树,深度为 0,递归结束
else
{
m=Depth(T->lchild); //递归计算左子树的深度记为 m
n=Depth(T->rchild); //递归计算右子树的深度记为 n
if(m>n) return(m+1);
        else return(n+1);//补充代码,可能不止一行
}
}
int NodeCount(BiTree T)//(5)统计二叉树中的结点的个数;
{   if(T==NULL) return 0;
   else{
    return NodeCount(T->lchild)+NodeCount(T->rchild)+1;}
//补充代码,可能不止一行
}
int LeafNodeCount(BiTree T)//(6)统计二叉树中的叶结点的个数
{  if(T==NULL)return 0;
    else if(T->lchild==NULL&&T->rchild==NULL)
    return LeafNodeCount(T->lchild)+LeafNodeCount(T->rchild)+1;
    else return LeafNodeCount(T->lchild)+LeafNodeCount(T->rchild);
//补充代码,可能不止一行
}
int compareTree(BiTNode* tree1, BiTNode* tree2)//(7)判别两棵树是否相等
//先判断当前节点是否相等(需要处理为空、是否都为空、是否相等),如果当前节点不相等,直接返回两棵树不相等;
//如果当前节点相等,那么就递归的判断他们的左右孩子是否相等。
//用分治的方法做,比较当前根,然后比较左子树和右子树
{
bool tree1IsNull = (tree1==NULL);//tree1 为空则赋值 1
bool tree2IsNull = (tree2==NULL);//tree2 为空则赋值 1
if(tree1IsNull != tree2IsNull)
{
return 1;//当前结点不相等则返回 1
}
if(tree1IsNull && tree2IsNull)
{//如果两个都是 NULL,则相等返回 0
return 0;
}
//如果根节点不相等,直接返回不相等,否则的话,看看他们孩子相等不相等
if(tree1->data != tree2->data)
{
return 1;
}
return
(compareTree(tree1->lchild,tree2->lchild)&compareTree(tree1->rchild,tree2->rchild))&(compareTree(tree1->lchild,tree2->rchild)&compareTree(tree1->rchild,tree2->lchild));
}//算法结束
int main()
{
BiTree T,new_T;
cout<<"请输入建立二叉树的序列:\n";
CreateBiTree(T);//补充代码,可能不止一行
PreOrderTraverse(T);//递归先序遍历树 T
printf("\n");
InOrderTraverse(T);//递归中序遍历树 T
printf("\n");
PostOrderTraverse(T);//递归后序遍历树 T
printf("\n");
cout<<"树的深度为:"<<Depth(T)<<endl;//(4)计算二叉树的深度;
cout<<"结点个数为:"<<NodeCount(T)<<endl;//(5)统计二叉树中的结点的个数;
cout<<"叶结点个数为:"<<LeafNodeCount(T)<<endl;//(6)统计二叉树中叶结点的个数
Copy(T,new_T);//(3)复制二叉树;
cout<<"两棵树比较:"<<compareTree(T, new_T)<<endl;//(7)判别两棵树是否相等
cout<<"复制得到的新树的中序序列:\n";
InOrderTraverse(new_T);//递归中序遍历树 T
printf("\n");
return 0;
} 
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月7日
    • 创建了问题 10月30日

    悬赏问题

    • ¥30 为什么会失败呢,该如何调整
    • ¥50 如何在不能联网影子模式下的电脑解决usb锁
    • ¥20 服务器redhat5.8网络问题
    • ¥15 如何利用c++ MFC绘制复杂网络多层图
    • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
    • ¥15 python螺旋图像
    • ¥15 算能的sail库的运用
    • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
    • ¥15 找代写python里的jango设计在线书店
    • ¥15 请教如何关于Msg文件解析