二叉树最远两结点之间的距离如下图所示
思路:利用二叉树的高度求解此题,就是遍历每个结点,计算该节点左右子树的高度之和,然后就是在这些和当中取最大值即可.
#include <iostream>
using namespace std;
/*
求二叉树最远结点距离
*/
static int max = 0; //记录结果的值
template <class T> //这里用了模板
struct btree {
T data;
struct btree<T>* lchild;
struct btree<T>* rchild;
};
typedef btree<int> btnode;
typedef int mytype;
/*初始化二叉树 输入0为空结点*/
void init(btnode* &root) {
root = new btnode;
int num;
cin >> num;
if (num) {
root->data = num;
init(root->lchild);
init(root->rchild);
}
else {
root = NULL;
}
}
/*获得二叉树的深度*/
int getHeight(btnode*& root) {
if (root) {
int leftHeight = 0;
int rightHeight = 0;
leftHeight = getHeight(root->lchild);
rightHeight = getHeight(root->rchild);
return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}
return 0;
}
/*利用前序遍历 求出每个结点左右子树深度之和 求出最大值*/
int getMaxDistance(btnode* &root) {
if (root) {
int leftHeight = getHeight(root->lchild);
int rightHeight = getHeight(root->rchild);
max = (leftHeight + rightHeight) > max ? (leftHeight + rightHeight) : max;
getMaxDistance(root->lchild); //前序遍历
getMaxDistance(root->rchild);
}
else {
return 0;
}
}
int main()
{
btnode* root;
init(root);
getMaxDistance(root);
cout << max;
return 0;
}
测试用例: