面试题88:二叉树中结点的最大距离

来源:互联网 发布:舆情监控软件多少钱 编辑:程序博客网 时间:2024/05/16 01:07
题目:

如果我们把二叉树看成一个图,父子结点之间的连线看成是双向的,我们姑且定义“距离”为两结点之间边的个数。

写一个程序求一棵二叉树中两个结点之间的距离。

思路:

求两个结点之间的最大距离,可以分为两种情况:
第一、两个结点经过了根结点。

第二、两个结点不经过根结点。

总结就是,我们可以求出每个结点的左右高度,那么经过该结点最长路径就是:左子树高度+右子树高度。

最后找出所有结点对应的最长路径的最大值就是我们需要的。

实现如下:

#include <iostream>using namespace std;struct Node{int val;Node *left;Node *right;Node(int _val) :val(_val), left(NULL), right(NULL){}};int GetMaxLength(Node *root, int &max){if (root == NULL) return 0;int leftHeight = GetMaxLength(root->left, max);int rightHeight = GetMaxLength(root->right, max);if (max < (leftHeight + rightHeight)) max = leftHeight + rightHeight;return (leftHeight>rightHeight ? leftHeight : rightHeight) + 1;}int main(){int max = 0;Node *n1 = new Node(1);Node *n2 = new Node(2);Node *n3 = new Node(3);Node *n4 = new Node(4);Node *n5 = new Node(5);Node *n6 = new Node(6);Node *n7 = new Node(7);Node *n8 = new Node(8);Node *n9 = new Node(9);n1->left = n2;n1->right = n3;n2->left = n4;n2->right = n5;n4->left = n6;n6->left = n7;n5->left = n8;n8->left = n9;cout<<GetMaxLength(n1, max)<<endl;cout << max << endl;}


0 0
原创粉丝点击