IDEAR___ 2023-10-21 23:01 采纳率: 25%
浏览 2

构造一个二叉树,并用先序遍历输出,但是出不来结果(C语言),有人能帮看看哪里写错了吗?



```c
#include<stdio.h>
#include<stdlib.h>

typedef struct BinaryTreeNode
{
    int data;
    struct BinaryTreeNode*left;
    struct BinaryTreeNode*right;
}BinaryTreeNode;
BinaryTreeNode *a[20];
BinaryTreeNode *b[20];
int front=0;
int rear=0;
int top=-1;
void push_stack(BinaryTreeNode*Node)
{
    b[++top]=Node;
}
BinaryTreeNode*pop_stack()
{
    BinaryTreeNode*pointer=b[top];
    top--;
    return pointer;
}
void push(BinaryTreeNode*Node)
{
    a[rear]=Node;
    rear=(rear+1)%20;
}
BinaryTreeNode* pop()
{
    BinaryTreeNode*Node=a[front];
    front=(front+1)%20;
    return Node;
}

BinaryTreeNode* CreateNode(int data)
{
    BinaryTreeNode*Node=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
    Node->data=data;
    Node->left=NULL;
    Node->right=NULL;
    return Node;
}
void Insert(BinaryTreeNode*root,int data)
{
    BinaryTreeNode*Node=CreateNode(data);
    BinaryTreeNode*pointer;
    if(root==NULL) root=Node;
    else
    {
        push(root);
        while(rear!=front)
        {
            pointer=pop();
            if(pointer->left!=NULL)
            {
                push(pointer->left);
                if(pointer->right!=NULL)
                    push(pointer->right);
                else
                {
                    pointer->right=Node;
                    return;
                }
            }
            else
                {
                    pointer->left=Node;
                    return;}

        }
    }
}
void PreOrder(BinaryTreeNode*root)
{
    BinaryTreeNode*pointer=root;
    while(top!=-1||pointer!=NULL)
    {
        if(pointer!=NULL){
                printf("%d",pointer->data);
                push_stack(pointer);
                pointer=pointer->left;

        }
        else{
            pointer=pop_stack();
            pointer=pointer->right;
        }
    }

}

int main()
{
    BinaryTreeNode*root;
    root=NULL;
    Insert(root,0);
    printf("%d",root==NULL);
    Insert(root,1);
    Insert(root,2);
    Insert(root,3);
    Insert(root,4);
    Insert(root,5);
    Insert(root,6);
    PreOrder(root);
}



  • 写回答

2条回答 默认 最新

  • threenewbee 2023-10-21 23:33
    关注

    好复杂,还用堆栈,为什么不直接递归下。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月21日

悬赏问题

  • ¥15 有限差分法求解以下的一维流动的偏微分方程
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!