`

求二叉树中节点的最大距离(比较适合我理解思路)

阅读更多
求二叉树中节点的最大距离

求二叉树中节点的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2。

这是论坛上的一道算法题,我目前想到的解法是:
二叉树中任意两个节点间的最大距离,那么其中一个节点必定是层次最深的一个节点,记该节点为A。该二叉树中层次最深的节点可能有多个,但只需要选择其中一个记为A。找出了A,那么遍历二叉树中其它非A的节点,访问各节点的时候求出该节点到A的距离,从而记录下求到的最大距离。因此题目可以转化为:求一个二叉树中,给定的两个节点间的距离。

首先就要求出这两个不同的节点间的公共父节点,这个题目出过多次了,解法是:
假设两个节点为A和B,中序遍二叉树,遍历的时候记录下各节点的层次深度,同时,遇到A或者B的时候开始记录层次最浅的节点,直到遇到B或者A的时候,或者遇到根节点(层次深度为0)的时候,终止记录。那么,记录下来的层次最浅的节点就是A和B的公共父节点。
这个求公共父节点算法的原理是A和B的公共父节点必在中序遍历后的A和B之间。

如果求得两个不同节点(记为A和B)之间的公共父节点(记为P),那么事情就很简单了,A和B之间的距离就是A和P之间的距离,加上B和P之间的距离,也就是A和P之间的层次差,与B和P之间的层次差,它们两者之和。

这只是一个初步的算法,远远算不上高效,因为找到A之后,还需要两次嵌套遍历二叉树,外层是求各个节点到A的距离,内层是求各个节点与A的公共父节点。正因为如此,应该存在巨大的优化空间。

转:http://liouwei20051000285.blog.163.com/blog/static/25236742011443514198/
分享到:
评论

相关推荐

    二叉树中的两节点中的最大距离

    在二叉树问题中,"二叉树中的两节点中的最大距离"是一个常见的算法问题,主要涉及图论和数据...理解这个算法不仅有助于解决当前问题,还能为其他类似的问题提供思路,如求树的直径或者找到两个节点之间的最短路径等。

    二叉树课程设计

    - **二叉树节点结构**:每个节点包含数据域、指向左子树的指针和指向右子树的指针。 - **递归实现**:大多数操作都采用递归的方式实现,这有助于简化代码并保持清晰度。 - **先序遍历**:先访问根节点,然后递归...

    python画图-使用Python+turtle实现画二叉树.zip

    二叉树是一种数据结构,它由节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。在计算机科学中,二叉树常用于搜索、排序和组织数据。用图形方式表示二叉树可以帮助我们更好地理解和分析其结构。 ...

    前端大厂最新面试题-leetcode.docx

    排序是算法中的一种常见操作,通过排序,可以解决许多问题,例如求解数组的交集、排列的最大周长等。 * 题目:242. 有效的字母异位词、349. 两个数组的交集、350. 两个数组的交集 II、922. 按奇偶排序数组 II、976....

    C语言的习题练习面试的题

    根据题目要求,我们需要在二叉树中找到两个节点的最近公共祖先,并计算以此公共祖先为根的子树的大小(即子树中的节点数量)。题目给出了一些约束条件、输入输出格式以及示例。 ### 一、问题理解与分析 #### 1. ...

    数据结构培训教程.pptx

    在完全二叉树中,节点的编号和其父节点及子节点有着明确的对应关系。堆是一种特殊的数据结构,如小根堆,其中所有父节点的值都小于等于子节点的值。堆操作如插入和删除的时间复杂度为O(logn),而带哈希的堆可以...

    数据结构习题解析51-100

    - **解题思路**:可以采用哈希表辅助查找的方法,遍历链表时将每个节点值存入哈希表,一旦发现某节点值已存在于哈希表中,则该节点即为第一个重复节点。 - **习题56**:对于一个双向链表,实现其逆序输出。 - **...

    2005年南京邮电学院数据结构考研试题

    以上就是针对2005年南京邮电学院数据结构考研试题中部分题目的知识点分析,涵盖了大O表示法、数组操作、二叉树节点数量、最优排序算法等多个方面,希望能够帮助考生更好地理解和掌握数据结构的相关知识点。

    数据结构 哈弗曼树的编译码 课程设计 实验报告.pdf

    数据结构课程设计中,哈弗曼树的编译码是一个重要的实践环节,旨在让学生深入理解和应用数据结构中的关键概念。哈弗曼树,也被称为最优二叉树或最小带权路径长度树,是一种特殊的二叉树,常用于数据压缩、编码优化等...

    数据结构课程设计习题集

    此问题要求学生对二叉树节点进行染色,并求出能染成绿色的节点数量。学生需要理解二叉树的存储结构和操作,以及如何用染色规则解决问题。 4. 散列表的设计与实现: 此问题要求学生设计一个散列表来实现电话号码查找...

    kd树的创建及搜索 matlab实现

    从根节点开始,根据查询点与当前节点子空间分割轴的距离比较,决定向下哪个子节点搜索。在每个节点,我们都记录最近邻候选,以备后续节点无法提供更近的邻居。 2. **范围搜索**:范围搜索则是在给定半径内寻找所有的...

    数据结构实验报告

    例如,通过比较未平衡二叉树和AVL树的查找效率,展示平衡树的优势。或者,通过实际运行时间的测量,验证哈希表在理想哈希函数和存在冲突情况下的性能。 在软件工程1001班20103349李杨同学的实验报告中,他可能详细...

    西南交通大学-zhy-数据结构第4次作业.docx

    二叉树的直径是指树中任意两叶节点之间最长路径的长度。这里的“最长路径”不一定经过根节点。 **算法思路:** 1. **递归求解:** 分别求左右子树的高度,加上当前节点的高度(即1),得到当前节点作为根节点时的...

    数据结构.zip

    在"数据结构.zip"中,可能会包含关于这些数据结构的理论介绍、示例代码、练习题和解题思路等内容,对于学习和提升编程技能非常有帮助。通过深入学习和实践,可以更好地理解和应用这些数据结构,从而解决实际问题。

    ACM解题笔记

    - 层序遍历是从根节点开始,按照从上到下、从左到右的顺序遍历树中的所有节点。 通过以上解析,我们可以看到本题不仅考察了学生对图论基本概念的理解,还要求掌握并灵活运用广度优先搜索等算法解决实际问题的能力...

    java20道非常经典的编程题

    - 查找二叉树中两个节点的最近公共祖先,可以使用递归或者自底向上的方法。 9. **回文链表**: - 判断一个链表是否为回文,可以将链表翻转后与原链表比较,或者使用双指针。 10. **最长公共前缀**: - 找出一组...

    数据结构1800题考研习题

    数据结构是计算机科学与技术专业核心课程之一,它主要研究...在解答过程中,不仅要关注正确答案,更要理解解题思路,从而加深对数据结构本质的理解。同时,不断实践和总结错误,是提升编程能力和问题解决能力的关键。

Global site tag (gtag.js) - Google Analytics