Algorithm 二叉树的逆时针边界遍历

Algorithm 二叉树的逆时针边界遍历,algorithm,data-structures,binary-tree,Algorithm,Data Structures,Binary Tree,给定一棵二叉树,从根开始逆时针打印二叉树的边界节点 编辑: 问题陈述指出,二叉树的边界元素将以逆时针方式打印,即树左边界上的元素后跟叶节点,后跟树右边界上的元素。问题特别提到:“左边界以自上而下的方式打印,叶节点以左右方式打印,右边界以自下而上的方式打印。” 我遵循了教程 我的代码如下: void printLeft(struct node* root) { if(root==NULL) return; if(root->left) {

给定一棵二叉树,从根开始逆时针打印二叉树的边界节点

编辑: 问题陈述指出,二叉树的边界元素将以逆时针方式打印,即树左边界上的元素后跟叶节点,后跟树右边界上的元素。问题特别提到:“左边界以自上而下的方式打印,叶节点以左右方式打印,右边界以自下而上的方式打印。”

我遵循了教程

我的代码如下:

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
我的代码会失败。你能帮我修一下吗


另外,这不是家庭作业。我正在准备面试,却被困在这里。

你认为为什么会出错?输出应为
10,5,2,8,6
,据我所知,这是正确的输出。@RonTeller当前输出应为10,5,7,4,2,8,6。我的代码遗漏了7和4。为什么最后是6而不是5?@Davidisenstat问题陈述指出,二叉树的边界元素将以逆时针方式打印,即树左边界上的元素后跟叶节点,再后跟树右边界上的元素。问题特别提到:“左边界以自上而下的方式打印,叶节点以左-右的方式打印,右边界以自下而上的方式打印。”希望我把问题说清楚。