//建树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);
}
{
++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);
}
{
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);
}