您的位置:首页 > 其它

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

2014-12-23 18:31 441 查看
题目:如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。

分析:由题意可知这是一棵二叉树,会出现两种情况:(1)最长的路径经过当前节点;(2)最长的路径每经过当前节点。所以只需要递归地求出经过每个节点的最长路径。具体看代码实现:

#include<iostream>

using namespace std;

typedef struct node{
struct node *left;
struct node *right;
int value;
}Node,BSTreeNode;

int nMax;

void addBSTreeNode(BSTreeNode *&pCurrent, int value)//传的是指针的引用,创建二叉排序树
{
if(pCurrent==NULL)
{
BSTreeNode *pBSTree = new BSTreeNode();
pBSTree->left=NULL;
pBSTree->right=NULL;
pBSTree->value=value;
pCurrent=pBSTree;
return ;
}
if(pCurrent->value>value)
{
addBSTreeNode(pCurrent->left,value);
return ;
}
if(pCurrent->value<value)
{
addBSTreeNode(pCurrent->right,value);
return ;
}
cout<<"value repeted!!"<<endl;
}

int findMaxLen(Node *root)
{
int leftValue=0,rightValue=0,sum;
if(root==NULL) return 0;
if(root->left!=NULL)
{
leftValue=findMaxLen(root->left);
leftValue++;
}
if(root->right!=NULL)
{
rightValue=findMaxLen(root->right);
rightValue++;
}
sum=leftValue+rightValue;
if(nMax<sum) nMax=sum;
return leftValue>rightValue?leftValue:rightValue;
}

int main()
{
nMax=0;
Node *pRoot=NULL;
addBSTreeNode(pRoot,10);
addBSTreeNode(pRoot,6);
addBSTreeNode(pRoot,14);
addBSTreeNode(pRoot,4);
addBSTreeNode(pRoot,8);
addBSTreeNode(pRoot,12);
addBSTreeNode(pRoot,16);
addBSTreeNode(pRoot,26);
addBSTreeNode(pRoot,1);
// cout<<pRoot->value<<endl;
findMaxLen(pRoot);
cout<<nMax<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: