二叉树的右 View 是从右侧查看树时可见的节点集。
我的功能:
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/