判断平衡二叉树
先上代码:
#include<iostream>
using namespace std;
struct BiNode{
char date;
BiNode *lchild,*rchild;
};
class BiTree{
private:
BiNode *root;
public:
BiTree(){root=Creat(root);}
~BiTree(){Release(root);}
void PreOrder(){PreOrder(root);}
void InOrder(){InOrder(root);}
void PostOrder(){PostOrder(root);}
int Depth(){return Depth(root);}
int Isblancedtree(){return Isblancedtree(root);}
private:
BiNode *Creat(BiNode *bt);
void Release(BiNode *bt);
void PreOrder(BiNode *bt);
void InOrder(BiNode *bt);
void PostOrder(BiNode *bt);
int Depth(BiNode *bt);
int Isblancedtree(BiNode *bt);
};
BiNode* BiTree::Creat(BiNode *bt){
char ch;
cin>>ch;
if(ch=='#')
bt=NULL;
else{
bt=new BiNode;
bt->date=ch;
bt->lchild=Creat(bt->lchild);
bt->rchild=Creat(bt->rchild);
}
return bt;
}
void BiTree::Release(BiNode *bt){
cout << "~TreeNode()" << endl;
if(bt->lchild!=NULL){
delete bt->lchild; //递归析构左子树
}
if(bt->rchild!=NULL){
delete bt->rchild;//递归析构右子树
}
}
void BiTree::PreOrder(BiNode *bt){
if(bt==NULL)
return;
else{
cout<<bt->date;
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}
void BiTree::InOrder(BiNode *bt){
if(bt==NULL)
return;
else{
InOrder(bt->lchild);
cout<<bt->date;
InOrder(bt->rchild);
}
}
void BiTree::PostOrder(BiNode *bt){
if(bt==NULL)
return;
else{
PostOrder(bt->lchild);
PostOrder(bt->rchild);
cout<<bt->date;
}
}
int BiTree::Depth(BiNode *bt){
if(bt==NULL)
return 0;
else
{
int a=Depth(bt->lchild);
int b=Depth(bt->rchild);
return (a>b)? (a+1):(b+1);
}
}
int BiTree::Isblancedtree(BiNode *bt)
{
if(bt==NULL)
return 1;
int left=Depth(bt->lchild);
int right=Depth(bt->rchild);
int gap=left-right;
if(gap>1||gap<-1)
return 0;
return Isblancedtree(bt->lchild)&&Isblancedtree(bt->rchild);
}
int main()
{
cout<<"请输入二叉树的字符串:";
BiTree Tree;
cout<<"前序遍历为:";
Tree.PreOrder();
cout<<endl;
cout<<"二叉树的深度:";
cout<<Tree.Depth()<<endl;
if(Tree.Isblancedtree()!=0)
cout<<"是平衡二叉树"<<endl;
else
cout<<"不是平衡二叉树"<<endl;
return 0;
}
再看测试数据:
请输入二叉树的字符串:6421##3##5##87##9##
前序遍历为:642135879
二叉树的深度:4
是平衡二叉树
~TreeNode()
Press any key to continue
判断平衡二叉树先构建二叉树:
struct BiNode{
char date;
BiNode *lchild,*rchild;
};
class BiTree{
private:
BiNode *root;
public:
BiTree(){root=Creat(root);}
~BiTree(){Release(root);}
void PreOrder(){PreOrder(root);}
void InOrder(){InOrder(root);}
void PostOrder(){PostOrder(root);}
int Depth(){return Depth(root);}
int Isblancedtree(){return Isblancedtree(root);}
private:
BiNode *Creat(BiNode *bt);
void Release(BiNode *bt);
void PreOrder(BiNode *bt);
void InOrder(BiNode *bt);
void PostOrder(BiNode *bt);
int Depth(BiNode *bt);
int Isblancedtree(BiNode *bt);
};
关键是:
int BiTree::Depth(BiNode *bt){
if(bt==NULL)
return 0;
else
{
int a=Depth(bt->lchild);
int b=Depth(bt->rchild);
return (a>b)? (a+1):(b+1);
}
}
int BiTree::Isblancedtree(BiNode *bt)
{
if(bt==NULL)
return 1;
int left=Depth(bt->lchild);
int right=Depth(bt->rchild);
int gap=left-right;
if(gap>1||gap<-1)
return 0;
return Isblancedtree(bt->lchild)&&Isblancedtree(bt->rchild);
}
本文来自博客园,作者:种星记,转载请注明原文链接:https://www.cnblogs.com/zhongxingji/p/17697239.html