获得0而不是空的二进制搜索树 [英] Getting 0 instead of null for binary search tree

查看:108
本文介绍了获得0而不是空的二进制搜索树的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在试图清除我的二叉树而且这样做时,我得到一个0,而不是从下code空。树被定义为空时,它引用空但是这没有发生。错误可以在横向上的树中看到。我怎样才能改变它,这样在第二组数字被插入时,0不显示?

 的#include<&stdio.h中GT;
    #包括LT&;&stdlib.h中GT;    typedef结构节点{
            int值;
            结构节点*离开;
            结构节点*权利;    }节点;    节点*插入(节点*节点int值){
        如果(节点== NULL){
            节点*温度;
            TEMP =(节点*)malloc的(的sizeof(节点));
            TEMP-GT&;值=价值;
            TEMP-GT&;左= TEMP-GT&右= NULL;
            返回温度;
        }
        如果(价值>(&于节点GT;值)){
            与于节点GT;右=插入(与于节点的GT;右,值);
        }
        否则,如果(值≤(与于节点GT;值)){
            与于节点GT;左=插入(与于节点GT;左,值);
        }
        返回节点;
    }    序无效(节点*节点){
        如果(节点== NULL){
            返回;
        }
        序(与于节点GT;左);
        的printf(%D,与于节点GT;值);
        序(与于节点的GT;右);
    }    虚空preorder(节点*节点){
            如果(节点== NULL){
                返回;
            }
            的printf(%D,与于节点GT;值);
            preorder(与于节点GT;左);
            preorder(与于节点的GT;右);
    }    无效后序(节点*节点){
            如果(节点== NULL){
                返回;
            }
            后序(与于节点GT;左);
            后序(与于节点的GT;右);
            的printf(%D,与于节点GT;值);
    }   / *这里的问题是产生一个0,而不是空并且可以在横向可以看出:( * /
    空空(节点*节点){
        如果(与于节点GT;左)
            与于节点GT;左= NULL;
        如果(与于节点的GT;右)
            与于节点GT;右= NULL;
        如果(与于节点GT;值)
            与于节点GT;值= NULL;
        与于节点GT;值= NULL;
    }    诠释主(){            节点*根= NULL;
            根=刀片(根,5);
            根=刀片(根,-1);
            根=刀片(根,3);
            根=插入(根,-14);
            根=插入(根,8);
            根=刀片(根,10);
            根=刀片(根,9);
            根=插入(根,6);            序(根);
            的printf(\\ n);
            preorder(根);
            的printf(\\ n);
            后序(根);
            的printf(\\ n);            空(根);            根=刀片(根,1);
            根=插入件(根,2);
            根=刀片(根,3);            序(根);
            的printf(\\ n);
            preorder(根);
            的printf(\\ n);
            后序(根);
            的printf(\\ n);    }


解决方案

 无效空(节点**节点){
    如果(*节点){
        空(及(*节点) - >左);
        空(及(*节点) - GT;右);
        免费(*节点);
        *节点= NULL;
    }
}
...
//在主
空(安培;根);

I have been trying to clear my binary tree and when doing so I get a 0 instead of null from the code below. The tree is defined to be empty when it references NULL but that's not happening. The error can be seen in the traversing over the tree. How can I change it so that when the second set of numbers are inserted, the 0 doesn't show?

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

    typedef struct Node{
            int value;
            struct Node * left;
            struct Node * right;

    } Node;

    Node * insert(Node * node, int value){
        if(node == NULL){
            Node *temp;
            temp = (Node *)malloc(sizeof(Node));
            temp->value = value;
            temp->left = temp->right = NULL;
            return temp;
        }
        if(value >(node->value)){
            node->right = insert(node->right,value);
        }
        else if(value < (node->value)){
            node->left = insert(node->left,value);
        }
        return node;
    }

    void inorder(Node * node){
        if(node == NULL) {
            return;
        }
        inorder(node->left);
        printf("%d ", node->value);
        inorder(node->right);
    }

    void preorder(Node * node){
            if(node == NULL){
                return;
            }
            printf("%d ",node->value);
            preorder(node->left);
            preorder(node->right);
    }

    void postorder(Node *node){
            if(node == NULL){
                return;
            }
            postorder(node->left);
            postorder(node->right);
            printf("%d ",node->value);
    }

   /* issue here is produces a 0 instead of null and that can be seen in the traversing :( */
    void empty(Node * node) {
        if (node->left)
            node->left = NULL;
        if (node->right)
            node->right = NULL;
        if (node->value)
            node->value = NULL;
        node->value = NULL;
    }

    int main(){

            Node * root = NULL;
            root = insert(root, 5);
            root = insert(root, -1);
            root = insert(root, 3);
            root = insert(root, -14);
            root = insert(root, 8);
            root = insert(root, 10);
            root = insert(root, 9);
            root = insert(root, 6);

            inorder(root);
            printf("\n");
            preorder(root);
            printf("\n");
            postorder(root);
            printf("\n");

            empty(root);

            root = insert(root, 1);
            root = insert(root, 2);       
            root = insert(root, 3); 

            inorder(root);
            printf("\n");
            preorder(root);
            printf("\n");
            postorder(root);
            printf("\n");      

    }

解决方案

void empty(Node ** node) {
    if(*node){
        empty(&(*node)->left);
        empty(&(*node)->right);
        free(*node);
        *node = NULL;
    }
}
...
//at main
empty(&root);

这篇关于获得0而不是空的二进制搜索树的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆