/* ********************************************************************* Version 1.0 Author fan Created 2011-6-29 ********************************************************************* */ #include<iostream> #include<cmath> using namespace std; template<typename T> struct BSTreeNode { T data; BSTreeNode *left; BSTreeNode *right; }; template<typename T> int DepthTree(BSTreeNode<T> *pbs) { if (pbs==NULL) return 0; else { int leftLength=DepthTree(pbs->left); int rigthLength=DepthTree(pbs->right); return 1+(leftLength>rigthLength ? leftLength:rigthLength); } } template<typename T> bool isBalanceTree(BSTreeNode<T> *pbs) { if (pbs==NULL) { return true; } int depthLeft=DepthTree(pbs->left); int depthRight=DepthTree(pbs->right); if (abs(depthLeft-depthRight)>1) return false; else return isBalanceTree(pbs->left) && isBalanceTree(pbs->right); } void CreateTree1(BSTreeNode<int> *pHead) { int m; int i; int rNum; cin>>m; BSTreeNode<int> *currentNode; currentNode=pHead; pHead->left=NULL; pHead->right=NULL; cin>>currentNode->data; for(i=1;i<m;i++) { rNum=rand()%2; if (rNum==0) { BSTreeNode<int> *leftNode; leftNode=new BSTreeNode<int>; cin>>leftNode->data; leftNode->left=NULL; leftNode->right=NULL; currentNode->left=leftNode; currentNode=leftNode; } else { BSTreeNode<int> *rightNode; rightNode=new BSTreeNode<int>; cin>>rightNode->data; rightNode->right=NULL; rightNode->left=NULL; currentNode->right=rightNode; currentNode=rightNode; } } } void CreateTree2(BSTreeNode<int> *pHead) { int m; cin>>m; cin>>pHead->data; pHead->left=NULL; pHead->right=NULL; int i; BSTreeNode<int> *pCurrent; pCurrent=pHead; for (i=1;i<m;i++) { BSTreeNode<int> *pTemp; pTemp=new BSTreeNode<int>; pTemp->left=NULL; pTemp->right=NULL; cin>>pTemp->data; pCurrent->left=pTemp; pCurrent=pCurrent->left; } pCurrent=pHead; while (pCurrent!=NULL) { cout<<pCurrent->data; pCurrent=pCurrent->left; } } int main() { BSTreeNode<int> *head=NULL; head=new BSTreeNode<int>; CreateTree1(head); //CreateTree2(head); if (isBalanceTree(head)) { cout<<"It is a Balance Tree!"<<endl; }else { cout<<"The tree is not Balance!"<<endl; } return 0; }