【发布时间】:2018-10-23 22:36:00
【问题描述】:
上面显示了一个 3(2?) 级二叉树。我的问题是如何从二叉树中同一级别的两个叶节点中找到祖先节点?例如,(3, 4)的祖先节点是1。(3, 5)的祖先节点是0。(5, 6)的根节点是2。如果给定两个叶子节点,如何找到它们的第一个共同祖先节点?我正在使用 C++。我的方法和伪代码就像
int mother{} \\ an algorithm to find mother node
int n1(7), n2(11); \\two integer leaf nodes.
int a1(-1), a2(-2);
while(a1 != a2)
{
a1=mother(n1);
a2=mother(n2);
n1=a1;
n2=a2;
}
我认为这太复杂了。我想知道是否存在任何更简单的算法?
【问题讨论】:
-
将二叉树保存到数组中很简单。查找如何将二叉树存储在数组中。然后打印该数组。您将立即想出解决方案
-
你只给了子节点吗?或者您是否有权访问根节点?
-
您通常无法直接访问树中每个节点的父节点,因此您不能只获取
parent(node)。您必须从根开始并找到两个节点,然后以某种方式比较您采用的路径。 -
由于“母亲”在大多数文化中是一个神圣的词,因此当前首选的节点命名法是根、父母、孩子、孩子、兄弟姐妹而不是母亲、父亲、儿子和女儿等。