二叉树的右 View 是从右侧查看树时可见的节点集。

c++ - 二叉树的右 View-LMLPHP

我的功能:

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

对于上面的树,我得到的右 View 为58 68 6367。但是正确的答案将是58 68 63 673。这种情况发生在我遍历67时,我发现我的节点没有任何左或右子节点,并且打破循环。但是由于这种行为,我错过了处于较低级别的潜在节点。
还可以看到,如果节点3是节点67的子节点,我将获得正确的答案。

是否可以在不考虑使用Queue的情况下略微调整代码,以进行此操作?

附言-通过写作表达我的问题不是很好。请不要怀有敌意。

最佳答案

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

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

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

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

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

关于c++ - 二叉树的右 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60706118/

10-11 03:52