【问题标题】:Right View of Binary Tree二叉树的右视图
【发布时间】:2020-03-16 12:33:52
【问题描述】:

二叉树的右视图是从右侧查看树时可见的一组节点。

我的功能:

void rightView(Node *root)
{
if(root!=NULL)
    cout<<root->data<<" ";
while(root!=NULL)
{
    if(root->right!=NULL)
    {root=root->right; cout<<root->data<<" ";}

    else
    {
        root=root->left;

        if(root==NULL)
            break;
        else
            cout<<root->data<<" ";
    }
}
}

对于上面的树,我得到它的右视图为 58 68 63 67。但是正确的答案是 58 68 63 67 3。当我遍历到 67 时发生这种情况,我看到我的节点没有任何左视图或右孩子并跳出循环。但是由于这种行为,我错过了位于较低级别的潜在节点。 另请注意,如果节点 3 是节点 67 的子节点,我将获得正确答案。

有没有一种方法可以稍微调整我的代码,因为我正在考虑在不使用队列的情况下执行此操作?

附: - 我不太擅长通过写作表达我的问题。请不要有敌意。

【问题讨论】:

  • 你对右视图的定义我不清楚,你的意思是除非只有左节点,否则总是取右节点?在那种情况下,我看不出 3 应该是正确的答案吗?
  • 在每一层中,选择从右侧/方向看是第一个节点的节点。换句话说,右视图包含在其级别中的最后一个节点的所有节点。
  • 那么为什么你认为应该显示 3,因为它不是 67 的孩子?
  • 以这张图片作为左视图的例子。 link。我正在选择每个级别上的第一个节点,从左方向开始。
  • 将手指放在图形上,然后随着算法的运行向下移动,到67时,没有更多的孩子,左右都是nullptr,所以算法应该结束。跨度>

标签: c++ tree binary-tree


【解决方案1】:

这里有一个想法:迭代树的深度,并在该深度的所有节点的每次迭代中跟踪。确保它们从最左到右排序。

每次迭代:显示最右边的节点数据,并为下一次迭代创建节点列表。

此外,我建议您清理一下您的代码。例如,这里是您发布但“清理”的相同代码:

void rightView(Node *root)
{
    while(root!=NULL)
    {
        cout<<root->data<<" ";

        if(root->right!=NULL)
            root=root->right;
        else
            root=root->left;
    }
}

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 2012-03-02
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多