//建树void CreateBiTree(BiTree &T,char *pc,int &i)
{   
++i;
    char ch;
ch=pc[i];
if(ch=='#') T=NULL;
else
{    
if(!(T=(BiTree)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data=ch;
                                 
CreateBiTree(T->lch, pc,i);
CreateBiTree(T->rch, pc,i);
    }
}//先判断,再调用,可每次都是建立错误,把判断去掉后调用也出不来 void CDH_BitreeDlg::OnBnClickedBtnDepth()  //响应 二叉树深度
{
int depth;
CString depth_str;
CString depth_n;
UpdateData(TRUE);
CString show_str;
CString show_var1;
CString show_var2;
int len=m_e.GetLength();
    int cout=0;                  //计算空链域的个数
    int tag=1;                   //设置标志位 
    char *pc=new char[len];      //m_e接收
    memcpy(pc,m_e,len);
    CString s;
s="#";
    if(m_e=="")               //如果没有输入,则弹出提示对话框
    {
AfxMessageBox(_T("本二叉树的深度为:3"));
    tag=0;
    }
    for(int j=0;j<len;j++)
if(pc[j]==s) cout++;
if((cout!=(len/2+1)||len%2==0)&&tag)//已经输入的情况下,判断输入的序列是否真确
    {
tag=0;
AfxMessageBox(_T("二叉树的建立有错误!\n请检查是否输错"));
}
if(tag)
{

BiTree T;
int i=-1;
    CreateBiTree(T,pc,i);AfxMessageBox("KKK!");
depth= BTDepth(T);
depth_n.Format(_T("%d"),depth);
depth_str=_T("本二叉树的深度为:");
depth_str=depth_str+depth_n;
AfxMessageBox(depth_str);

delete[]pc;
pc=NULL;
UpdateData(FALSE);
}

解决方案 »

  1.   

    void CDH_BitreeDlg::OnBnClickedBtnShow()  //响应 显示 遍历
    {
    UpdateData(TRUE);
    CString show_str;
    CString show_var1;
    CString show_var2;
    int len=m_e.GetLength();
        int cout=0;                  //计算空链域的个数
        int tag=1;                   //设置标志位 
        char *pc=new char[len];
        memcpy(pc,m_e,len);
        CString s;
    s="#";
        if(m_e=="")               //如果没有输入,则按默认的进行相应的遍历
        {
    tag=0;
    UpdateData(TRUE);
    CString m_var2=_T("");
    char pc[15]={'A','B','E','#','#','F','#','#','C','G','#','#','I','#','#'};
    BiTree T;
    int i=-1;
    CreateBiTree(T,pc,i);
    if (IsDlgButtonChecked(IDC_RADIO1))
    {
    PreOrder(T,m_var2);
    m_var2=_T("递归算法先序遍历二叉树:")+m_var2;
    m_list.AddString(m_var2);
    UpdateData(FALSE);
     }
        else if ((IsDlgButtonChecked(IDC_RADIO2)))
    {
    m_var2="";
    InOrder(T,m_var2);
    m_var2=_T("递归算法中序遍历二叉树:")+m_var2;
    m_list.AddString(m_var2);
    UpdateData(FALSE);
    }
    else if (IsDlgButtonChecked(IDC_RADIO3))
    {
    m_var2="";
    PostOrder(T,m_var2);
    m_var2=_T("递归算法后序遍历二叉树:")+m_var2;
    m_list.AddString(m_var2);
    UpdateData(FALSE);
    }
    else if (IsDlgButtonChecked(IDC_RADIO4))
    {
    m_var2="";
    PreFOrder(T,m_var2);
    m_var2=_T("非递归算法前序遍历二叉树:")+m_var2;
    m_list.AddString(m_var2);
    UpdateData(FALSE);
    }
    else if (IsDlgButtonChecked(IDC_RADIO5))
    {
    m_var2="";
    InFOrder(T,m_var2);
    m_var2=_T("非递归算法中序遍历二叉树:")+m_var2;
    m_list.AddString(m_var2);
    UpdateData(FALSE);
    }
    else  if (IsDlgButtonChecked(IDC_RADIO6))
    {
    m_var2="";
    PostOrderUnrec(T,m_var2);
    m_var2=_T("非递归算法后序遍历二叉树:")+m_var2;
    m_list.AddString(m_var2);
    UpdateData(FALSE);
    }
        }
        for(int j=0;j<len;j++)
    if(pc[j]==s) cout++;
        if((cout!=(len/2+1)||len%2==0)&&tag)//已经输入的情况下,判断输入的序列是否真确
        {
    tag=0;
      AfxMessageBox(_T("二叉树的建立有错误!\n请检查是否输错"));
    }
    if(tag)
    {
    BiTree T;
    int i=-1;
        CreateBiTree(T,pc,i);
    if(IsDlgButtonChecked(IDC_RADIO1))
    {
    show_var2=_T("递归先序遍历:");
    PreOrder(T,show_var1);
    }
    else if(IsDlgButtonChecked(IDC_RADIO2))
    {
    show_var2=_T("递归中序遍历:");
    InOrder(T,show_var1);
    }
    else if(IsDlgButtonChecked(IDC_RADIO3))
    {
    show_var2=_T("递归后序遍历:");
    PostOrder(T,show_var1);
    }
    else if(IsDlgButtonChecked(IDC_RADIO4))
    {
    show_var2=_T("非递归先序遍历:");
     PreFOrder(T,show_var1);
    }
    else if(IsDlgButtonChecked(IDC_RADIO5))
    {
    show_var2=_T("非递归中序遍历:");
    InFOrder(T,show_var1);
    }
    else
    {
    show_var2=_T("非递归后序遍历:");
    PostOrderUnrec(T,show_var1);
    }
    show_str=show_var2+show_var1;
    m_list.AddString (show_str);
    }
    delete[]pc;
    pc=NULL;
    UpdateData(FALSE);
    }
      

  2.   

    输入格式为什么只能是ABC##D##EF##G##,谁告诉下怎么改
      

  3.   

    想改成直接输入字符串,去掉#控制,不用满二叉树能行吗,帮个忙,mfc是我们做课程设计是老师强制要求用的,自己正摸索中、、、