【问题标题】:How to find nodes at a distance k from the given node in binary tree如何在二叉树中找到距给定节点k距离的节点
【发布时间】:2016-08-20 18:21:36
【问题描述】:

我遇到了THISgeeksforgeeks 的帖子,在二叉树中找到距离给定节点 k 处的节点。

即使花了几个小时我也无法理解它。特别是在祖先中找到距离 k 的节点的部分。

有人可以帮我对 geeksforgeeks 帖子中的代码/算法进行一次小试运行吗?或者任何其他不使用父指针的易于理解的解决方案?

【问题讨论】:

    标签: algorithm binary-tree


    【解决方案1】:

    假设目标节点的深度为D。

    1. 如果你想要的节点在以目标节点为根的子树中,它们的深度应该是D+k。
    2. 之后,您需要找到目标节点的所有祖先。 对于每个祖先,如果深度为d,则该祖先到目标节点的距离为D-d。 所以最后一步是在这个祖先的另一个子树中找到距离为 k - (D-d) 的节点。

    【讨论】:

    • 感谢您的回复。我知道基本思想,但无法看到这是如何在代码中完成的。 :(
    • 代码的哪些部分? printkdistanceNodeDown(root, k)在节点“root”下查找到“root”距离为k的所有节点。 printkdistanceNode() 将检查目标节点是否在左子树 (if (dl != -1))、右子树 (if (dr != -1)) 中找到,或者不是它的子节点 (return -1)。
    • 再次感谢。我没有得到正确的子树部分。
    • 和左子树差不多。 dr 是当前节点到目标的距离,如果目标不是右子树的一部分,则为 -1。所以,你需要通过这个函数printkdistanceNodeDown(root->left, k-dr-2);找出左子树中距离为k-dr-2的所有节点。
    • 我的意思是问它何时检查右子树。他们说的部分://右子树代码的镜像//请注意,只有在左子树中找不到节点时,我们才能到达这里我们可以聊 5 分钟吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多