面试题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
- 面试题88:二叉树中结点的最大距离
- 二叉树中结点的最大距离
- 面试题:求二叉树中节点的最大距离
- 求二叉树中结点的最大距离
- 求二叉树中结点的最大距离
- 求二叉树中结点的最大距离
- 求二叉树中结点的最大距离
- 求一个二叉树中两个结点的最大距离
- 求二叉树结点的最大距离
- 二叉树结点的最大距离
- 【每日面试题】求一个二叉树中任意两个节点间的最大距离
- java面试题:如何求二叉树中节点的最大距离+层序遍历
- 3.8 二叉树中结点最大的距离 & 重建二叉树 & 顺序遍历二叉树
- 二叉树中两个结点的距离
- 二叉树中两个结点的距离
- 求二叉树的宽度(结点的最大距离)
- 9. 微软面试题:求二叉树中节点间最大距离
- 二叉树的最大路径和与最远结点距离
- iOS 中的事件处理
- 日期处理类
- linux驱动头文件说明
- android学习总结
- 【日常吐槽 · 第三期】又坑了自己
- 面试题88:二叉树中结点的最大距离
- span的属性
- Android通过注解初始化View
- 没事看看
- SQl 语句(常见) 新建,删除,修改表结构
- cmd命令终止和启动进程
- 如何将ubuntu控制台输出到串口?
- CS229 Lecture Notes(2): Logistic Regression
- kerberos原理分析