查找二叉树中两个节点的直接父节点

2025年3月17日 | 阅读11分钟

假设我们提供了一个树节点,主要任务是找出给定二叉树节点的父节点。要做到这一点,我们需要遍历整个树并定位给定树节点的父节点。

以下是一个算法,将解释以下任务: -

  1. 我们必须从二叉树的根开始。
  2. 我们必须使用任何树遍历方法遍历树,并继续遍历树,直到我们到达树的末尾或达到所需的节点。
  3. 在遍历和探索树的过程中,我们必须保留当前节点的父节点的引用。
  4. 如果我们找到任何给定的节点,我们就必须找到它的父节点引用,然后我们继续查找下一个或另一个节点。
  5. 我们必须重复此过程,直到我们找到两个节点或到达树的末尾。
  6. 我们必须将父节点的引用返回给当前节点。

实施

输出

Find Immediate Parents of Two Nodes in a Binary Tree

代码的分步解释

  1. 代码首先包含所有重要的头文件,这些头文件对于代码执行的输入和输出操作至关重要。
  2. 在代码的下一步,我们开始定义一个名为“Node”的结构,它代表二叉树中的一个节点,包含以下成员:数据以及指向左节点和右节点的指针。该结构还定义了一个构造函数,该构造函数以参数的形式评估节点的数据值并初始化左指针和右指针。
  3. 在定义完节点结构后,在下一步,我们声明一个名为“findParent”的函数。此函数还包含三个参数:node、val 和 parent。
  4. 现在,当我们走到这里时,我们知道这里一定有几种不同的情况: -
    • 假设如果当前节点是 NILL,则表示我们已到达分支的末尾,函数将返回而不会执行任何操作。
    • 如果当前节点的数据值与我们要查找的值匹配,则表示我们已找到目标节点。在这种情况下,函数将打印其父节点的值并返回相同的值。
    • 如果当前节点不是目标节点,则该函数将递归调用以找出当前节点的左子节点和右子节点。
  5. 在主函数中,创建一个二叉树,变量值为 3,它确定了我们要查找其父节点的节点。
  6. 接下来,调用“findParent”函数,它会得到二叉树的根和目标节点的值,然后我们需要打印它的值。
  7. 最后,程序的主函数返回 0,表示程序成功执行。

示例 2)

输出

Find Immediate Parents of Two Nodes in a Binary Tree

代码的分步解释

  1. 代码以定义名为 TPT 的程序类开始。
  2. 在 TPT 类中,我们创建了一个名为 Node 的嵌套静态类,它代表二叉树中的一个节点。每个数据节点都有一个整数值以及指向左节点和右节点的指针。
  3. 在定义完节点结构后,在下一步,我们声明一个名为“findParent”的函数。此函数还包含三个参数:node、val 和 parent。
  4. 现在,当我们走到这里时,我们知道这里一定有几种不同的情况: -
    • 假设如果当前节点是 NILL,则表示我们已到达分支的末尾,函数将返回而不会执行任何操作。
    • 如果当前节点的数据值与我们要查找的值匹配,则表示我们已找到目标节点。在这种情况下,函数将打印其父节点的值并返回相同的值。
    • 如果当前节点碰巧不是目标节点,则函数将递归调用以找出当前节点的左子节点和右子节点。
  5. 现在,在二叉树的主函数中,根表示二叉树的根节点,相应的节点创建了线路。
  6. 变量 node 表示值 3,我们需要为它找到父节点。
  7. 接下来,调用“findParent”函数,它会得到二叉树的根和目标节点的值,然后我们需要打印它的值。
  8. 最后,代码的输出也将是节点的父节点。

示例 3)

输出

Find Immediate Parents of Two Nodes in a Binary Tree

代码的分步解释

  1. 代码将开始在 init 方法中定义一个名为“Node”的类。声明的 node 方法包含一个整数值以及指向左节点和右节点的指针。
  2. 在定义完节点结构后,在下一步,我们声明一个名为“findParent”的函数。此函数还包含三个参数:node、val 和 parent。
  3. 现在,当我们走到这里时,我们知道这里一定有几种不同的情况: -
    • 假设如果当前节点是 NILL,则表示我们已到达分支的末尾,函数将返回而不会执行任何操作。
    • 如果当前节点的数据值与我们要查找的值匹配,则表示我们已找到目标节点。在这种情况下,函数将打印其父节点的值并返回相同的值。
    • 如果当前节点碰巧不是目标节点,则函数将递归调用以找出当前节点的左子节点和右子节点。
  4. 现在,我们进入程序的主函数,该函数负责程序的主要执行。主函数中声明的条件会验证主模块是否正在运行代码。
  5. 二叉树在主函数中以以下结构创建。
  6. 树的变量 node 被设置为 3,表示我们需要找出其父节点的节点。
  7. 程序中调用了“findParent”函数,它将包含二叉树的根、节点的值以及 -1 作为初始父节点值。
  8. 该函数递归搜索节点的父节点,然后在找到父节点时打印父节点的值。

示例 4)

输出

Find Immediate Parents of Two Nodes in a Binary Tree

代码的分步解释

  1. 代码首先导入主要的命名空间 system,它提供了程序基本输入/输出操作的程序功能。
  2. 代码以定义一个名为 TPT 的类开始,该类包含了二叉树和主程序的实现。
  3. TPT 内部有一个名为 Node 的嵌套类,它基本上代表二叉树节点。每个数据节点都有一个整数值以及指向左节点和右节点的指针。
  4. 在定义节点结构后,下一步我们声明一个名为“findParent”的函数。此函数还包含三个参数:node、val 和 parent。
  5. 现在,当我们走到这里时,我们知道这里一定有几种不同的情况: -
    • 假设如果当前节点是 NILL,则表示我们已到达分支的末尾,函数将返回而不会执行任何操作。
    • 如果当前节点的数据值与我们要查找的值匹配,则表示我们已找到目标节点。在这种情况下,函数将打印其父节点的值并返回相同的值。
    • 如果当前节点碰巧不是目标节点,则函数将递归调用以找出当前节点的左子节点和右子节点。
  6. 现在,在二叉树的主函数中,根表示二叉树的根节点,相应的节点创建了线路。
  7. 变量 node 表示值 3,我们需要为它找到父节点。
  8. 接下来,调用“findParent”函数,它会得到二叉树的根和目标节点的值,然后我们需要打印它的值。
  9. 最后,代码的输出也将是节点的父节点。

示例 5)

输出

Find Immediate Parents of Two Nodes in a Binary Tree

代码的分步解释

  1. 代码开始定义一个名为“Node”的类,该类将表示一个二叉树节点,它代表二叉树中的一个节点。每个数据节点都有一个整数值以及指向左节点和右节点的指针。
  2. 在定义完节点结构后,在下一步,我们声明一个名为“findParent”的函数。此函数还包含三个参数:node、val 和 parent。
  3. 现在,当我们走到这里时,我们知道这里一定有几种不同的情况: -
    • 假设如果当前节点是 NILL,则表示我们已到达分支的末尾,函数将返回而不会执行任何操作。
    • 如果当前节点的数据值与我们要查找的值匹配,则表示我们已找到目标节点。在这种情况下,函数将打印其父节点的值并返回相同的值。
    • 如果当前节点碰巧不是目标节点,则函数将递归调用以找出当前节点的左子节点和右子节点。
  4. 现在,在二叉树的主函数中,根表示二叉树的根节点,相应的节点创建了线路。
  5. 变量 node 表示值 3,我们需要为它找到父节点。
  6. 接下来,调用“findParent”函数,它会得到二叉树的根和目标节点的值,然后我们需要打印它的值。
  7. 最后,代码的输出也将是节点的父节点。

结论

总之,在二叉树中查找两个节点的直接父节点是一项需要遍历树并检查节点之间关系的Thus。通过使用适当的算法,例如深度优先搜索或广度优先搜索,我们可以非常快速地定位给定节点的直接父节点。