#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; }