给定二叉树,从根开始打印二叉树Anti-Clockwise的边界节点。
编辑: 问题陈述指出,要以逆时针方式打印的二叉树的边界元素,即树的左边界上的元素后跟叶节点,接着是树的右边界上的元素。问题特别提到:“左边界以自上而下的方式打印,叶节点以左右方式打印,右边界以底部方式打印。”
我遵循了this教程。
我的代码如下:
void printLeft(struct node* root)
{
if(root==NULL)
return;
if(root->left)
{
printf("%d ", root->data);
printLeft(root->left);
}else if(root->right)
{
printf("%d ", root->data);
printLeft(root->right);
}
}
void printRight(struct node* root)
{
if(root==NULL)
return ;
if(root->right)
{
printRight(root->right);
printf("%d ", root->data);
}else if(root->left)
{
printRight(root->left);
printf("%d ", root->data);
}
}
void printLeaves(struct node* root)
{
if(root==NULL)
return ;
printLeaves(root->left);
if(root->left==NULL&&root->right==NULL)
printf("%d ", root->data);
printLeaves(root->right);
}
void printBoundary(struct node* root)
{
if(root==NULL)
return;
printf("%d ", root->data);
printLeft(root->left);
printLeaves(root);
printRight(root->right);
}
但是,上面提到的方法有一个根本的缺陷: 考虑二叉树
> 10
> / \
> 5 6
> / \
> 7 8
> /
> 4
> /
> 2
我的代码会失败。你能帮我解决这个问题。
P.S。这不是家庭作业。我正准备接受采访并被困在这里。