【发布时间】: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