在二叉树中查找不是围绕您要查找的数据类型构建的数据

问题描述 投票:0回答:1

我有一棵二叉树,每个节点的数据基于人(名字和姓氏,邮政编码,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; 
}
c++ data-structures binary-tree binary-search-tree
1个回答
0
投票

我认为您需要检查两个孩子,而不仅仅是一个或另一个;由于未按年龄对树进行排序,因此树中年龄最大的人可能在任一分支中。

所以代替:

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);
© www.soinside.com 2019 - 2024. All rights reserved.