问题是,给定一棵二叉树,其中每个节点都有四条数据:左
、右
、data
和一个空指针父
,我们必须更新树,使每个节点的父
指针指向它的父(根父指针自然会指向一个NULL值)。现在我该怎么做?我尝试了这样的后序遍历:
last = None
def mypostorder(root):
if root:
mypostorder(root.left)
mypostorder(root.right)
if last:
last.parent = root
last = root
但显然它不起作用,我知道为什么,在更新左子的父
指针后,它将其设置为last
,因此下次当它访问右子时(它的兄弟),它将其父
设置为左子。如何调整它以获得正确的结果?是否可以使用堆栈迭代执行?
你走错方向了。我认为您的解决方案将使节点的父节点指向其子节点
试试看:
def myPostOrder(root, par=None):
if root:
root.parent = par
myPostOrder(root.left, root)
myPostOrder(root.right, root)
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个整数,分别表示二叉树的先序遍历序列和中序遍历序列。 输出格式: 对于每组测试,在一行上分别输出该二叉树的后序遍历序列,结点总数,叶子
主要内容:什么是二叉排序树?,使用二叉排序树查找关键字,二叉排序树中插入关键字,二叉排序树中删除关键字,总结前几节介绍的都是有关静态 查找表的相关知识,从本节开始介绍另外一种查找表—— 动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种使用树结构表示动态查找表的实现方法—— 二叉排序树(又称为 “二叉查找树”)。 什么是二叉排序树? 二叉排序树要么是空 二叉树,要么具有如下特点:
我正在研究一种寻找阳极父级的方法。我从根部开始,然后沿着叶子往下走,只要它们不是空的,不是孩子的节点。 下面是我的代码,它有点乱,因为我试着测试它看看哪里出了问题。