您的位置:首页 > 理论基础 > 数据结构算法

数据结构和算法经典100题-第29题

2015-12-30 13:11 281 查看
题目要求:二叉树节点间的最大距离问题从二叉树的节点A出发,可以向上走或者向下走,但沿途的节点只能经过一次,当达到节点B时,路径上的节点数叫作A到B的距离。比如:

1
2       3
4     5   6    7


节点4和节点2的距离为2,节点5和节点6的距离为5。现在给定一棵二叉树的头结点,求整棵二叉树上节点间的最大距离。

题目解析:

此问题不难解决,也算是经典的问题了吧。其实节点间的最大距离有以下三种情况:

1.是其左子树上两节点间的最大距离;

2.是其右子树上两节点间的最大距离;

3.是其左子树上的高度+其右子树的高度+1;

比较这三个值就可以解决了,后序遍历二叉树,递归的每次从下至上返回树高以及其节点最大距离就okay了。

Okay,no code say what?

struct Node {
int value;
Node *left;
Node *right;
};

void getDistence(Node *head, int &maxHigh, int &maxDis) {

int maxLeftDis = 0;
int maxRightDis = 0;
int maxLeftHigh = 0;
int maxRightHigh = 0;

if (!head) {

}

if (!head->left) {
getDistence(head->left, maxLeftHigh, maxLeftDis);
}
if (!head->right) {
getDistence(head->right, maxRightHigh, maxRightDis);
}
maxHigh = (maxLeftHigh > maxRightHigh) ? (maxLeftHigh + 1) : (maxRightHigh + 1);
maxDis = (maxLeftDis > maxRightDis) ? (maxLeftDis) : (maxRightDis);
maxDis = (maxDis > maxHigh) ? maxDis : maxHigh;
return ;
}


路漫漫其修远兮,吾将上下而求索…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息