求二叉树中节点的最大距离...
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,
我们姑且定义"距离"为两节点之间边的个数。
写一个程序,
求一棵二叉树中相距最远的两个节点之间的距离。
//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;
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,
我们姑且定义"距离"为两节点之间边的个数。
写一个程序,
求一棵二叉树中相距最远的两个节点之间的距离。
//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、改用非递归法。