求二叉树中节点的最大距离

求二叉树中节点的最大距离...
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,
我们姑且定义"距离"为两节点之间边的个数。
写一个程序,
求一棵二叉树中相距最远的两个节点之间的距离。
//coder:LEE
//20120308
#include<iostream>
#include<cassert>
using namespace std;
struct BiTreeNode
{
int value;
BiTreeNode *pLeft;
BiTreeNode *pRight;
};
int MaxDistance=0;


int RemoteDistance(BiTreeNode *root)
{
if(!root)
return 0;
int LeftDepth=RemoteDistance(root->pLeft);
int RightDepth=RemoteDistance(root->pRight);
int distance=LeftDepth+RightDepth;
MaxDistance=MaxDistance>distance?MaxDistance:distance;
return LeftDepth>RightDepth?LeftDepth+1:RightDepth+1;
}




void AddNode(BiTreeNode *&root,int data)
{
if(root==NULL)
{
root=new BiTreeNode();
root->pLeft=NULL;
root->pRight=NULL;
root->value=data;
}
else if(data<root->value)
AddNode(root->pLeft,data);
else
AddNode(root->pRight,data);
}
void Traverse(BiTreeNode *root)
{
if(!root)
return;
cout<<root->value<<" ";
Traverse(root->pLeft);
Traverse(root->pRight);
}
int main()
{
BiTreeNode * root=NULL;
AddNode(root,11);
AddNode(root,8);
AddNode(root,9);
AddNode(root,10);
AddNode(root,5);
AddNode(root,2);
AddNode(root,1);
AddNode(root,6);
AddNode(root,7);
Traverse(root);
cout<<"max distance:"<<RemoteDistance(root);
return 0;

}

改进建议:
1、本算法使用了MaxDistance全局变量,可以通过定义Struct Result结构体作为返回结果。
可以参考http://blog.csdn.net/zhongjiekangping/article/details/6858580
2、改用非递归法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值