【问题标题】:Looking for data in a binary tree that isn't built around the data type you're looking for在不是围绕您要查找的数据类型构建的二叉树中查找数据
【发布时间】:2020-04-30 00:27:30
【问题描述】:

我有一个二叉树,每个节点的数据都基于人(名字和姓氏、邮政编码、ssn 和出生日期)。该树基于创建时这些人的名字和姓氏(比较字符串,较小的向左),但我需要在同一棵二叉树中找到最年长的人。我当前的代码如下,我认为我在逻辑上走在正确的道路上。现在它只是返回一个错误,rightold 和 leftold 不是 NULL,但它们的初始值应该是什么?我现在的逻辑是否存在缺陷?我现在真的很难过,并且已经调整了一段时间。提前致谢!!

PS - 日期值是 YYYYMMDD 作为 int 的组合,这就是为什么我希望在比较中最小的日期值是我最旧的。

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; 
}

【问题讨论】:

  • 在取消引用之前不要检查xrightoldleftold

标签: c++ data-structures binary-tree binary-search-tree


【解决方案1】:

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

所以而不是:

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);

此外,比较leftoldrightold 以查看哪个更旧的代码需要处理这两个指针中的一个或两个为NULL 的情况,否则它会在尝试解除对NULL 指针的引用时崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 2023-04-02
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    相关资源
    最近更新 更多