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;
}
分析:由题意可知这是一棵二叉树,会出现两种情况:(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;
}
相关文章推荐
- 微软面试100道之11 求二叉树中节点的最大距离
- 11、求二叉树中节点的最大距离
- 11 求二叉树中节点的最大距离
- 微软算法100题11 求二叉树中两节点之间的最大距离
- 11.求二叉树中节点的最大距离
- 11.求二叉树中节点的最大距离
- 11.求二叉树中节点的最大距离
- 面试100题:11.求二叉树中节点的最大距离
- 面试100题:11.求二叉树中节点的最大距离
- 11. 求二叉树中节点的最大距离
- Solution 11: 二叉树中节点的最大距离
- 每天学习一算法系列(11) (求二叉树中节点的最大距离)
- 微软面试100题之11题:求二叉树中节点的最大距离
- IT公司100题-11-求二叉树中节点的最大距离
- 11、求二叉树中节点的最大距离...
- 算法与数据结构面试题(11)-求二叉树中节点的最大距离
- 微软100题(11) 二叉树中节点的最大距离
- [编程之美] PSet3.8 求二叉树中节点的最大距离
- 【每日面试题】求一个二叉树中任意两个节点间的最大距离
- 求二叉树中节点的最大距离 | 递归