逆时针方向的二叉树的边界遍历

时间:2014-02-26 08:37:55

标签: algorithm data-structures binary-tree

给定二叉树,从根开始打印二叉树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。这不是家庭作业。我正准备接受采访并被困在这里。

0 个答案:

没有答案