博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【算法题目】求二叉树中节点的最大距离
阅读量:4952 次
发布时间:2019-06-11

本文共 1081 字,大约阅读时间需要 3 分钟。

  如果我们把二叉树视为一个图,父子节点之间的连线视为双向的,我们姑且定义为“举例”为两节点之间边的个数。写一个程序求一颗二叉树中相距最远的两个节点之间的距离(《编程之美》3.8)

 

思路:如果两个节点相距最远,一定是两个叶子节点,或者是一个叶子节点到它的根节点。

   根据相距最远的两个节点一定是叶子节点这个规律,我们可以进一步讨论。

     对于任意一个节点,以该节点为根,假设这个根有k个孩子节点,那么相距最远的两个节点U和V之间的路径与这个根节点的关系有两种情况。

    1.若路径经过根Root,则U和V是属于不同子树的,且它们都是该子树种到根节点最远的节点,否则跟它们的最远距离矛盾。

    2. 如果路径不经过Root,那么它们一定属于根的k个子树之一。并且它们也是该子树相距最远的两个顶点。

参考资料:

  1. http://www.cnblogs.com/miloyip/archive/2010/02/25/1673114.html

int GetMaxDistance(TreeNode* root) {    if (root == NULL) return 0;        int max_distance = INT_MIN;    GetMaxDistance(root, INT_MIN);    return max_distance}int GetMaxDistance(TreeNode* root, int &max_distance) {    if (root == NULL) return -1;    int left_max_depth = GetMaxDistance(root->left, &max_distance);    int right_max_depth = GetMaxDistance(root->right, &max_distance);    int temp_distance = left_max_depth + right_max_depth + 2;    if (temp_distance > max_distance) max_distance = temp_distance;    return left_max_depth > right_max_depth ? left_max_depth + 1 : right_max_depth + 1;}

 

转载于:https://www.cnblogs.com/vincently/p/4740957.html

你可能感兴趣的文章
JStrom的zk数据
查看>>
使用“dotconnect for oracle”绕过oracle客户端连接Oracle数据库
查看>>
CentOS/RHEL Linux安装EPEL第三方软件源
查看>>
redisson
查看>>
Weblogic集群
查看>>
HDU 5351 MZL's Border (多校联合第5场1009)
查看>>
js三种定义类的方法
查看>>
离线批量数据通道Tunnel的最佳实践及常见问题
查看>>
Struts2学习第2天--Struts2的Servlet的API的访问 Struts2的结果页面的配置 Struts2的数据的封装(包括复杂类型)...
查看>>
python3练习100题——044
查看>>
ORACLE1.5(上班前必须掌握-开项目的准备)
查看>>
正则表达式学习笔记(2)元字符和修饰符
查看>>
基础算法(四)——深度优先搜索
查看>>
PHP 内存泄漏分析定位(转载)
查看>>
Linux基础命令之文件过滤及内容编辑处理(一)
查看>>
iOS - HTTPS接口加密和身份认证
查看>>
Swift - LineChart绘制折线图
查看>>
线性表(java)
查看>>
转:Selenium Grid深入学习
查看>>
人脸识别完整项目实战(1):目录大纲篇
查看>>