我遇到问题的修改版本(找到位于二叉树中距离k处的两个节点)。
我试图定义两个节点之间的距离,我相信它是沿着树枝从节点n1到节点n2所需的最小节点数。
顺利完成这个假设,我得出的情况是,我认为我需要知道每个节点是否在根的左侧或右侧。
情况1:如果n1和n2在不同的一侧,那么我爬到根(距离等于节点n1的深度 - 假设n1在左边)然后我向下跑到右边的节点n2(距离等于深度为n2)。因此,两个节点n1,n2之间的最大距离是它们在根的不同侧的深度之和。
案例2:如果n1和n2位于同一侧,我会在树层次结构中找到两者共有的祖先,并重复相同的过程,考虑到祖先的根,就像我在案例1中所做的那样。 最小距离将是它们从根部深度的总和 - 是共同祖先深度的2倍。
现在,问题是,我最终直截了当地为每对节点做了这个。我可以优化它,如果我知道一对节点远远超过这个但是如何知道,那么不检查一对?
请建议解决方案的其余部分。
答案 0 :(得分:1)
与Diameter of a Binary Tree相同的问题(参见自下而上的方法),它被定义为树中两个叶子之间最长路径上的节点数。在您的情况下,您还必须找到节点。
答案 1 :(得分:0)
@Benjamin,感谢指针。 topcoder教程链接在您建议的链接中的一个答案中完整地解释了问题和解决它的多种方法。
这是一个纯粹的LCA问题,我能够解决它。我想在这里也包括图案链接。
http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonAncestor