【发布时间】:2012-06-06 16:30:37
【问题描述】:
我遇到了问题的修改版本(在二叉树中查找位于距离 k 处的两个节点)。
我试图定义两个节点之间的距离,我相信它是沿着树枝从节点 n1 移动到节点 n2 所需的最小节点数。
继续这个假设,我认为我需要知道每个节点是在根的左侧还是右侧。
案例 1:如果 n1 和 n2 在不同的一侧,那么我爬到根部(距离等于节点 n1 的深度 - 假设 n1 在左侧)然后我跑到右侧节点 n2(距离等于n2) 的深度。所以两个节点 n1 , n2 之间的最大距离是它们在根的不同侧的深度之和。
案例 2:如果 n1 和 n2 在同一侧,我会在树层次结构中找到两个共同的祖先,并重复相同的过程,将祖先视为根,就像我在案例 1 中所做的那样。 最小距离将是它们与根的深度之和 - 共同祖先深度的 2 倍。
现在,问题在于,我最终坦率地为每一对节点都这样做。如果我知道一对节点的距离超过这个,我可以优化它以不检查一对节点,但是如何?
请提出其他解决方案。
【问题讨论】:
标签: binary-tree