题目:二叉树节点间的最大距离问题
从二叉树的节点a出发, 可以向上或者向下走, 但沿途的节点只能经过一次, 到达节点b时路径上的节点个数叫作a到b的距离, 那么二叉树任何两个节点之间都有距离, 求整棵树上的最大距离。
分析
对于树上的任意一个节点,它的最大距离有3种可能性,分别是左子树的最大距离、右子树的最大距离、和左子树的高度加右子树的高度加1。如果该节点最大距离等于左子树的最大距离或右子树的最大距离,只需要得到左子树或右子树的最大距离即可,但如果是第三种可能性,则需要得到左右子树的高度。所以每个节点的左孩子和右孩子都应该返回一种结构,该结构中包括以孩子节点节点为根节点的树的最大距离和树的高度,然后根据获取到的左右孩子的信息,选择出自己的最大距离和高度。
代码实现
#include <iostream>
using namespace std;
struct node{
int data;
node* left;
node* right;
node(int data){
this->data = data;
this->left = NULL;
this->right = NULL;
}
};
struct Info{
int maxDistance;
int height;
Info(int md,int h){
maxDistance = md;
height = h;
}
};
Info* process(node* root){
if(root == NULL){
return new Info(0,0);