判斷是否是二叉排序樹:
下面采用采用兩種方法窟扑,1.遞歸的進行判斷真仲。2.用中序遍歷判斷袋马。
后更:第一種方法實際上是錯誤的,按照[5,3,0,0,1,6]這棵樹用這個方法判斷出來是二叉排序樹秸应,但是實際上卻是錯誤的虑凛。
bool JudgeTree1(BiTree Tree)
{
if (Tree==NULL)
{
return true;
}
if (Tree->lchild==NULL)
{
return true;
}
else if ((Tree->data)<(Tree->lchild->data))
{
return false;
}
if (Tree->rchild==NULL)
{
return true;
}
else if((Tree->data)>(Tree->rchild->data))
{
return false;
}
if (JudgeTree1(Tree->lchild)==false)
{
return false;
}
if (JudgeTree1(Tree->rchild)==false)
{
return false;
}
return true;
}
//中序遍歷
static ElemType Num = INT_MIN;
bool JudgeTree2(BiTree Tree,ElemType *pNum = &Num)
{
if (Tree==NULL)
{
return true;
}
JudgeTree2(Tree->lchild,pNum);
if (Tree->data>(*pNum))
{
(*pNum) = Tree->data;
}
else
{
return false;
}
JudgeTree2(Tree->rchild,pNum);
}
判斷是否是平衡二叉樹:
判斷大小碑宴,一個個節(jié)點判斷,同上方法1桑谍;
判斷平衡因子延柠,自底向上一邊積累樹的高度一邊計算差值。
int JudgeAVL(BiTree Tree,bool *Result)
{
if (Tree==NULL||(*Result)==false)
{
return 0;
}
//判斷大小關系對不對
if (Tree->lchild!=NULL)
{
if ((Tree->data)<(Tree->lchild->data))
{
(*Result)=false;
return 0;
}
}
if (Tree->rchild!=NULL)
{
if((Tree->data)>(Tree->rchild->data))
{
(*Result)=false;
return 0;
}
}
int L_High,R_High;
L_High = JudgeAVL(Tree->lchild,Result);
R_High = JudgeAVL(Tree->rchild,Result);
if (abs(L_High-R_High)>=2)
{
(*Result) = false;
}
return getMax(L_High,R_High)+1;
}