我有一棵二叉树,每个节点的数据基于人(名字和姓氏,邮政编码,ssn和生日)。该树基于创建时这些人的名字和姓氏(比较字符串,左边的较小),但是我需要在同一二叉树中找到最老的人。我当前的代码在下面,我认为我在逻辑上是正确的。现在,它只是返回一个错误,其中rightold和leftold不为NULL,但是它们的初始值应该是什么?我的逻辑现在是否存在缺陷?我现在真的很困惑,并且已经调整了一段时间。预先感谢!
PS-日期值是YYYYMMDD作为一个整数的组合,这就是为什么我希望最小的日期值成为我在比较中最早的日期。
node * Tree::oldest(node * x)
{
node * rightold, * leftold, * res, * finalRes;
if (x -> right != NULL)
{
rightold = oldest (x->right);
}
else if (x -> left != NULL)
{
leftold = oldest (x->left);
}
if (rightold -> date < leftold -> date)
res = rightold;
else
res = leftold;
if (res -> date < x -> date)
finalRes = res;
else
finalRes = x;
return finalRes;
}
我认为您需要检查两个孩子,而不仅仅是一个或另一个;由于未按年龄对树进行排序,因此树中年龄最大的人可能在任一分支中。
所以代替:
node * rightold, * leftold, * res, * finalRes;
if (x -> right != NULL)
{
rightold = oldest (x->right);
}
else if (x -> left != NULL)
{
leftold = oldest (x->left);
}
尝试:
node * rightold = NULL, * leftold = NULL, * res = NULL, * finalRes = NULL;
if (x->right) rightold = oldest (x->right);
if (x->left) leftold = oldest (x->left);