【问题标题】:For my C code, I am not sure how the binary tree is looping because my expected output is different then the actual output?对于我的 C 代码,我不确定二叉树是如何循环的,因为我的预期输出与实际输出不同?
【发布时间】:2019-09-30 12:18:35
【问题描述】:

我正在跟踪教授给出的部分代码,但我不明白二叉树是如何工作的。问题是:“编写一个函数来查找二叉搜索树中的最低共同祖先并返回一个指针。树 T 中两个节点 a 和 b 之间的最低共同祖先定义为 T 中同时具有 a 和 b 作为后代的最低节点。 以下面的树为例。 4和8的最低共同祖先是6。4和14的最低共同祖先是10。”

        10
     6     14
   4  8  12  16 

我的问题是我不明白它是如何循环的?

node *lca(node *ptr, int a, int b)
{
    if(ptr==NULL)
        return NULL;
    while (ptr != NULL)
    {   
        if (ptr->key >= a && ptr->key <= b)//What's key?
            return (ptr);
        else if (ptr->key > b)
            ptr = ptr->left;
        else if (ptr->key < a)
            ptr = ptr->right;
    }
    return (ptr);
}

【问题讨论】:

  • 该代码有什么问题,或者您只需要解释他在做什么以及如何做?
  • @Suma 代码很好。我希望既然教授给了它。我需要一个关于他在做什么以及如何做的解释

标签: loops pointers tree binary-tree nodes


【解决方案1】:

这段代码的思路如下:

假设树是二进制排序的,我们可以检查 ab 元素是否在当前节点的不同侧(如果我们找到了我们的 lca)。

在二叉树中,对于每个节点,较大的元素向右,较小的元素向左。所以,如果a比当前节点小而b大,这意味着它们来自不同的侧面-> lca。

ptr-&gt;key 正在访问节点中的数据。

当第一个 if 语句失败时,意味着 a 和 b 都来自同一侧 -> 下一个 2 if 语句选择是继续向右还是向左搜索(b 小于左侧的当前节点)如果右侧都更大,则电流更大)

注意此代码假定 a 小于 b。

【讨论】:

  • 设置 a=4 ,b=8 , ~~~ if (ptr->key >= a && ptr->key =4 8
  • 如果第一个键是 10,则第一个 if 语句失败为 4
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
相关资源
最近更新 更多