繁体   English   中英

我试图实现一棵二叉树并按预定顺序遍历它,但它仅在显示 function 中显示 0,并且创建 function 正在工作

[英]I tried to implement a binary tree and traverse it in pre-order but it is showing 0 only in display function, and the create function is working

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

//diclaration
struct node* create();
 struct node
    {
        int data;
        struct node *left,*right;

    };
    struct node *root,*newnode;
    void preorder(struct node*root);

**创建 function 正在工作**

    struct node* create()
    {
        
        int x;
        //newnode=(struct node*)malloc(sizeof(struct node));
        newnode=(struct node*)malloc(sizeof(struct node));
        printf("\t\nenter the value or -1 for no node ");
        scanf("%d",&x);
        if(x==-1)
        {return 0;}
        else
        {
            newnode->data=x;
            printf("\t\nenter the left child of %d ",x);
            newnode->left=create();
            printf("\t\nenter the right child of %d ",x);
            newnode->right=create();
            return newnode;


        }
    }

**但显示无法正常工作**

void preorder(struct node*root)
{
    if(root==0)
    { return;}
    else
    {
        printf("%d ",root->data);
        preorder(root->left);
        preorder(root->right);
    }
}


 void main()
{

//root=0;
//root=create();
int f;
    do{
        int c;
        
        printf("\t\ndo you want to create(0) or display(1)  a tree ");
        scanf("%d",&c);
        switch(c)
            {
                case 0: 
                root=0;
                root=create();
                break;
                case 1: printf("\t\npre order is ");
                        preorder(root);
                break;
                default:printf("\t\nenter a valid number");
                break;
            
                
            }   
        
        
        printf("\t\ndo you want to proceed (1/0)");
        scanf("%d",&f);
        
      }while(f==1);
    
    
}

/* OUTPUT 你想创建(0)还是显示(1)一棵树 0

输入值或 -1 表示没有节点 12

输入 12 的左子节点 输入值或 -1 表示没有节点 13

输入 13 的左子节点 输入值或 -1 表示没有节点 -1

输入 13 的右子节点 输入值或 -1 表示没有节点 -1

输入 12 的右子节点 输入值或 -1 表示没有节点 15

输入 15 的左子节点 输入值或 -1 表示没有节点 -1

输入 15 的右子节点 输入值或 -1 表示没有节点 -1

你想继续吗 (1/0)1

你想创建(0)还是显示(1)一棵树 1

预购是 0 你想继续吗 (1/0) */

create中,您将新分配的节点分配给newnode ,它是一个全局变量。 这意味着在 function 的每个实例中,它写入同一个变量,覆盖那里的所有内容。

由于此类问题,应避免使用全局变量。 newnode应该声明为 local 以create ,并且root应该声明在main function 中。

此外,如果您为特定节点输入 -1,则会出现 memory 泄漏。 要解决此问题,请将读取值后分配新节点的代码移至else部分。

问题不在于显示 function 认为你犯了一个小错误,有些人可能会说这不是一个错误,因为编译器接受它并做了它应该做的事情。 你犯的小错误是指针的检查。 当您检查指针的值时,最好使用关键字 NULL,而不是 0。!! root==NULL 或 root!=NULL。

现在关于您创建 function。 与递归结合使用的全局 newNode 将无法正常工作!!! 由于创建,您的树的结构搞砸了,这就是显示不起作用的原因!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM