这个问题可能被很多人问过,但是,它有点不同。我们有一个二叉树。给你两个节点p&q。我们得找到最不常见的父母。但是您没有指向根的根节点指针。为您提供了两个内置函数,它们是:
如果节点c实际上是root,那么parentNode函数将返回null
值。使用这些函数,我们必须找到树中最不常见的父树。
步骤1:使用parentnode
函数查找节点p
与根的距离d1
。类似地,查找节点q
与根的距离d2
。(例如,d2
出来时大于d1
)步骤2:将更远的节点(其D值更大)指针d2-d1
步骤移向根。步骤3:同时将指针P
和Q
移向根,直到它们指向同一个节点并返回该节点。
基本上,这就像找到两个链接列表的合并点一样。
检查下面的链接:检查两个链表是否合并。如果有,在哪里?时间复杂性:O(N)
您的代码看起来大致如下:
node* LCP(node* p, node *q){
int d1=0, d2=0;
for(node* t= p; t; t = parentNode(p), ++d1);
for(node* t= q; t; t = parentNode(q), ++d2);
if(d1>d2){
swap(d1, d2);
swap(p, q);
}
for(int i=0; i<(d2-d1); ++i)
q = parentNode(q);
if( same(p, q)){
return parentNode(p);
}
while( !same(p, q)){
p = parentNode(p);
q = parentNode(q);
}
return p;
}
问题内容: 我有一个如下的二叉树。我需要找到最不常见的祖先(LCA)。例如6和4的LCA为1,4和5的LCA为2。 谁能建议我该如何解决这个问题? 问题答案: 从普通的深度优先搜索算法开始: 现在,将其修改为采用两个“目标”参数,即target1和target2。 当搜索target1带您离开,而搜索target2带您去时,您已经找到了LCA。 假设两个目标确实存在。如果需要断言它们确实如此,则需
我希望在BST中找到具有特定值的节点的父节点。我的节点类具有左右属性项(即值/键)。 查找父级的想法是这样的: 1)如果值(key)不存在,则返回无,无 2)如果根等于值(key),则返回无,根 3)否则查找值(key)并返回(par, node),其中par是父级和节点 我的函数是这样的: 当 为“无”时,如何处理该问题?
主要内容:什么是二叉排序树?,使用二叉排序树查找关键字,二叉排序树中插入关键字,二叉排序树中删除关键字,总结前几节介绍的都是有关静态 查找表的相关知识,从本节开始介绍另外一种查找表—— 动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种使用树结构表示动态查找表的实现方法—— 二叉排序树(又称为 “二叉查找树”)。 什么是二叉排序树? 二叉排序树要么是空 二叉树,要么具有如下特点:
我正在研究一种寻找阳极父级的方法。我从根部开始,然后沿着叶子往下走,只要它们不是空的,不是孩子的节点。 下面是我的代码,它有点乱,因为我试着测试它看看哪里出了问题。
我正在努力实现二叉搜索树。完成实现所需的功能之一是重新平衡功能。 根据规范,该功能的工作方式如下: rebalance() 方法应创建一个平衡树,从而将偏度降低为零。平衡树是指在整个树中,左子树和右子树的大小相差不超过1(即,每个子树也是平衡的)。 为了平衡树,rebalance() 方法应反复将根值移动到较小的子树,并将最小/最大值从较大的子树移动到根,直到树平衡。然后,它应该以递归方式平衡两个
问题是,给定一棵二叉树,其中每个节点都有四条数据:、、和一个空指针,我们必须更新树,使每个节点的指针指向它的父(根父指针自然会指向一个NULL值)。现在我该怎么做?我尝试了这样的后序遍历: 但显然它不起作用,我知道为什么,在更新左子的指针后,它将其设置为,因此下次当它访问右子时(它的兄弟),它将其设置为左子。如何调整它以获得正确的结果?是否可以使用堆栈迭代执行?