我需要以螺旋形式打印二叉树的节点,使用层序遍历。即不同级别的节点应以螺旋形式打印。
例如:如果树看起来像这样:
输出应为10 5 20 25 15 6 4。
我使用的算法很简单,只是层序遍历的一个小变化。我只取了一个变量p。如果变量等于1,则按给定级别从左到右打印顺序,如果为-1,则从右到左打印。
void getlevel(struct node *root,int n,int p)
{
if(root==NULL)
return;
if(n==0)
{
printf("%d ",root->info);
return;
}
if(n>0)
{
if(p==1)
{
getlevel(root->left,n-1,p);
getlevel(root->right,n-1,p);
}
if(p==-1)
{
getlevel(root->right,n-1,p);
getlevel(root->left,n-1,p);
}
}
}
我得到了答案,但在出现倾斜树的情况下,最坏情况复杂度可能为O(n^2)。
这个任务是否有更好的算法呢?
我的整个程序在这里