#include<iostream>
using namespace std;
struct Node
{
char data;
int nMaxLeft;
int nMaxRight;
Node* left;
Node* right;
};
int nMaxLen;
int FindMaxLen(Node* pRoot) //求二叉树中节点的最大距离
{
if(pRoot==NULL)return NULL;
if(pRoot->left==NULL)pRoot->nMaxLeft=0;
if(pRoot->right==NULL)pRoot->nMaxRight=0;
if(pRoot->left!=NULL)
{
FindMaxLen(pRoot->left);
}
if(pRoot->right!=NULL)
{
FindMaxLen(pRoot->right);
}
//计算左子树最长节点距离
if(pRoot->left!=NULL)
{
int nTempMax=0;
if(pRoot->left->nMaxLeft>pRoot->left->nMaxRight)
{
nTempMax=pRoot->left->nMaxLeft;
}
else
{
nTempMax=pRoot->left->nMaxRight;
}
pRoot->nMaxLeft=nTempMax+1;
}
//计算右子树最长节点距离
if(pRoot->right!=NULL)
{
int nTempMax=1;
if(pRoot->right->nMaxLeft>pRoot->right->nMaxRight)
{
nTempMax=pRoot->right->nMaxLeft;
}
else
{
nTempMax=pRoot->right->nMaxRight;
}
pRoot->nMaxRight=nTempMax+1;
}
//更新最长距离
if(pRoot->nMaxLeft+pRoot->nMaxRight > nMaxLen)
{
nMaxLen=pRoot->nMaxLeft+pRoot->nMaxRight;
}
}
Node* createTree() //先根建树
{
char ch;
Node* p;
cin>>ch;
if(ch=='#')return NULL;
p=new Node();
p->data=ch;
p->left=createTree();
p->right=createTree();
return p;
}
int main()
{
while(true)
{
nMaxLen=0;
Node* pRoot=createTree(); //先根建树
FindMaxLen(pRoot); //求二叉树中节点的最大距离
cout<<"nMaxLen= "<<nMaxLen<<endl;
}
system("pause");
return 0;
}