/**
求二叉树中节点的最大距离
如果我们把二叉树看成一个图,
父子节点之间的连线看成是双向的,
我们姑且定义"距离"为两节点之间边的个数。
写一个程序,
求一棵二叉树中相距最远的两个节点之间的距离。
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct BSTreeNode
{
int data;
struct BSTreeNode *left; // left child of node
struct BSTreeNode *right; // right child of node
}Node,*Tree;
int max(int x1,int x2)
{
if(x1 > x2)
return x1;
else
return x2;
}
int helper(Node *root,int *depth)
{
if(root==NULL)
{
*depth=0;
return 0;
}
int ld=0,rd=0;
helper(root->left,&ld);//递归求左子树深度
helper(root->right,&rd);//递归求右子树深度
*depth=max(ld,rd)+1;//算上该节点的深度
return ld+rd;
}
int maxDistance(Node *root)
{
int depth=0;
return helper(root,&depth);
}
Tree CreateBiTree(){
int ch;
Tree T;
scanf("%d",&ch);
if(ch==0)T=NULL;//输入0作为空节点的标志
else{
T = (Tree)malloc(sizeof(Node));
T->data = ch;