回 帖 发 新 帖 刷新版面

主题:二叉树的基本操作,帮忙看看!调试不出来

//-------二叉树的基本操作-----
Status CreateBiTree(BiTree T)
{//先序序列创建一棵二叉树
 char ch;
 scanf("%c",&ch);
 if(ch==' ') T=NULL;
  else
  {T=(BiTree)malloc(sizeof(BiTNode));
  if(!T) return ERROR;
  T->data=ch;
  CreateBiTree(T->lchild);
  CreateBiTree(T->rchild);
  }
return OK;
}
void PreOrderTraverse(BiTree T)
{//二叉树的先序遍历

 if(T)
 {printf("%c",T->data);
  PreOrderTraverse(T->lchild);
  PreOrderTraverse(T->rchild);
 }
}
void InOrderTraverse(BiTree T)
{////二叉树的中序遍历

 if(T) 
 {InOrderTraverse(T->lchild);
  printf("%c",T->data);
  InOrderTraverse(T->rchild);
 }
}

void PostOrderTraverse(BiTree T)
{//二叉树的后序遍历
 if(T) 
 {PostOrderTraverse(T->lchild);
  PostOrderTraverse(T->rchild);
  printf("%c",T->data);
 }
}
int CountLeaf(BiTree T)
{//计算二叉树的叶子结点数
int m,n;
 if(T==NULL)  return 0;
  else if(!T->lchild&& !T->rchild) return 1;
          else
          {m=CountLeaf(T->lchild);
           n=CountLeaf(T->rchild);
           return(m+n);
          }
}
int BiTreeDepth(BiTree T)
{//计算二叉树的深度
 int depthval,ldepthval,rdepthval;
 if(!T) depthval=0;
  else if(!T->lchild && !T->rchild) depthval=1;
          else
          {ldepthval=BiTreeDepth(T->lchild);
           rdepthval=BiTreeDepth(T->rchild);
           depthval=ldepthval>rdepthval?ldepthval:rdepthval+1;
          }
return depthval;
}
main()
{BiTree T;
printf("请输入创建一棵二叉树的先序序列:");
CreateBiTree(T);
printf("先序序列为:");
PreOrderTraverse(T);
printf("\n中序序列为:");
InOrderTraverse(T);
printf("\n后序序列为:");
PostOrderTraverse(T);
printf("二叉树所含叶子结点数为:%d",CountLeaf(T));
printf("\n二叉树的深度为:%d\n",BiTreeDepth(T));


}

回复列表 (共13个回复)

11 楼

请输入创建一棵二叉树的中序序列:a
a的左结点:b
b的左结点:
b的右结点:
a的右结点:c
c的左结点:
c的右结点:
先序序列为:abc
中序序列为:bac
后序序列为:bca二叉树所含叶子结点数为:2
二叉树的深度为:2
Press any key to continue

12 楼

顶8楼和10楼

13 楼

到这个网站去看看,有很多算法的源程序
算法源码吧 [url=http://www.sfcode.cn/]http://www.sfcode.cn/[/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册