当前位置: 首页 > 知识库问答 >
问题:

更新二叉树中的父指针

鲁鸿朗
2023-03-14

问题是,给定一棵二叉树,其中每个节点都有四条数据:data和一个空指针,我们必须更新树,使每个节点的指针指向它的父(根父指针自然会指向一个NULL值)。现在我该怎么做?我尝试了这样的后序遍历:

last = None
def mypostorder(root):
    if root:
      mypostorder(root.left)
      mypostorder(root.right)
      if last:
        last.parent = root
      last = root

但显然它不起作用,我知道为什么,在更新左子的指针后,它将其设置为last,因此下次当它访问右子时(它的兄弟),它将其设置为左子。如何调整它以获得正确的结果?是否可以使用堆栈迭代执行?

共有2个答案

微生耘豪
2023-03-14

你走错方向了。我认为您的解决方案将使节点的父节点指向其子节点

试试看:

def myPostOrder(root, par=None):
    if root:
        root.parent = par
        myPostOrder(root.left, root)
        myPostOrder(root.right, root)
曹理
2023-03-14
void setParent(node * ptr,node * parent_ptr)
{

if(ptr==NULL)
return;

ptr->parent=parent_ptr; //update the parent for the current node

parent_ptr=ptr; //now update the parent pointer

setParent(ptr->left,parent_ptr); //repeat the process for children

setParent(ptr->right,parent_ptr);
}

初始调用:setParent(root,NULL)

 类似资料:
  • 我在研究二叉树。我找到了在树中插入节点的代码。这里“root”是类“TreeType”中结构类型的指针变量,作为“private member”。 在这个函数中,“根”是通过引用传递的,所以在“插入”函数中,“树”中的任何变化也会导致“根”的变化。如果我们再次调用插入函数,根将指向最后一个节点还是指向第一个节点?所以,根据我的说法,当它指向最后一个节点时,插入函数将不再工作。有人能帮忙吗?

  • 这个问题可能被很多人问过,但是,它有点不同。我们有一个二叉树。给你两个节点p&q。我们得找到最不常见的父母。但是您没有指向根的根节点指针。为您提供了两个内置函数,它们是: 如果节点c实际上是root,那么parentNode函数将返回值。使用这些函数,我们必须找到树中最不常见的父树。

  • 我希望在BST中找到具有特定值的节点的父节点。我的节点类具有左右属性项(即值/键)。 查找父级的想法是这样的: 1)如果值(key)不存在,则返回无,无 2)如果根等于值(key),则返回无,根 3)否则查找值(key)并返回(par, node),其中par是父级和节点 我的函数是这样的: 当 为“无”时,如何处理该问题?

  • 二叉树 二叉树采用二叉链表存储,要求根据给定的先序遍历序列和中序遍历序列建立二叉树,并输出后序遍历序列、结点总数、叶子数、度为1的结点数、度为2的结点数。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据的第一行输入结点数n(1≤n≤10),第二、三行各输入n个整数,分别表示二叉树的先序遍历序列和中序遍历序列。 输出格式: 对于每组测试,在一行上分别输出该二叉树的后序遍历序列,结点总数,叶子

  • 主要内容:什么是二叉排序树?,使用二叉排序树查找关键字,二叉排序树中插入关键字,二叉排序树中删除关键字,总结前几节介绍的都是有关静态 查找表的相关知识,从本节开始介绍另外一种查找表—— 动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种使用树结构表示动态查找表的实现方法—— 二叉排序树(又称为 “二叉查找树”)。 什么是二叉排序树? 二叉排序树要么是空 二叉树,要么具有如下特点:

  • 我正在研究一种寻找阳极父级的方法。我从根部开始,然后沿着叶子往下走,只要它们不是空的,不是孩子的节点。 下面是我的代码,它有点乱,因为我试着测试它看看哪里出了问题。