#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std;
#define Len 10
template<class T>
struct Tree
{
T data;
Tree *Left;
Tree *Right;
public:
Tree():Left(0),Right(0){};
};
void show(const Tree<int> &t);
bool PreOrderTraverse(Tree<int> *t);
bool InnerOrderTraverse(Tree<int> *t);
bool PosOrderTraverse(Tree<int> *t);
int Depth(Tree<int> *t);
bool IsBalance(Tree<int> *t);
int main()
{
vector<Tree<int> > tree;
Tree<int> Node;
int i;
for( i=0;i<Len;i++)
{
Node.data=i+1;
tree.push_back(Node);
}
vector<Tree<int> >::iterator it=tree.begin() ;
//for(it = tree.begin();it!=tree.end();it++)
for(unsigned i=0;i<tree.size();i++)
{
if((i+i+1)<tree.size())
(*(it+i)).Left = &(*(it+2*i+1));
if((i+i+2)<tree.size())
(*(it+i)).Right = &(*(it+2*i+2));
}
//for_each(tree.begin(),tree.end(),show);
cout<<"PreOrder:";
PreOrderTraverse(&tree[0]);
cout<<endl;
cout<<"InnerOrder:";
InnerOrderTraverse(&tree[0]);
cout<<endl;
cout<<"InnerOrder:";
PosOrderTraverse(&tree[0]);
cout<<endl;
cout<<"The depth of tree:"<<Depth(&tree[0]);
cout<<endl;
cout<<"IsBalance:"<<(IsBalance(&tree[0])?"Ture":"False");
}
void show(const Tree<int> &t)
{
cout<<t.data<<",";
}
//前序遍历
bool PreOrderTraverse(Tree<int> *t)
{
if(t!=0)
{
show(*t);
if(PreOrderTraverse(t->Left))
if(PreOrderTraverse(t->Right))
return true;
return false;
}
else
return true;
}
//中序遍历
bool InnerOrderTraverse(Tree<int> *t)
{
if(t!=0)
{
if(InnerOrderTraverse(t->Left))
{
show(*t);
if(InnerOrderTraverse(t->Right))
return true;
}
return false;
}
else
return true;
}
//后序遍历
bool PosOrderTraverse(Tree<int> *t)
{
if(t!=0)
{
if(PosOrderTraverse(t->Left))
if(PosOrderTraverse(t->Right))
{
show(*t);
return true;
}
return false;
}
else
return true;
}
//求树的深度
int Depth(Tree<int> *t)
{
if(t!=0)
return max( Depth(t->Left),Depth(t->Right))+1;
else
return 0;
}
//判断是否是一颗平衡树
bool IsThan(int left ,int right)
{
return abs(left - right)>1?0:1;
}
bool IsBalance(Tree<int> *t)
{
if(t!=0)
{
if(IsThan(Depth(t->Left),Depth(t->Right)))
return IsBalance(t->Left)&&IsBalance(t->Right);
else
return false;
}
else
return true;
}
树的遍历、深度、平衡树
最新推荐文章于 2020-08-18 16:32:25 发布