0

を書きたいのですBSTが、挿入機能が動作しません。デバッグすると、挿入されていないことがわかりました。

/* Binary Search Tree (BST).demo */
#include <stdio.h>
#include <stdlib.h>

typedef struct treeNode{
    int data;
    struct treeNode* lChild;
    struct treeNode* rChild;
 } treeNode;

treeNode* createNode(){
        treeNode *nNode;
        nNode=(struct treeNode*)malloc(sizeof(treeNode));
        nNode->data=0;
        nNode->lChild=NULL;
        nNode->rChild=NULL;

        return nNode;
}

void insert(treeNode* rt,int idata)
{
  if(rt==NULL){
    treeNode* nNode;
    nNode=createNode();
    nNode->data=idata;
    rt=nNode;
    rt->lChild=NULL;
    rt->rChild=NULL;
  }else{
    if(idata < rt->data)
        insert(rt->lChild,idata);
    else insert(rt->rChild,idata);

  }
}

int main()
{
    treeNode *root;
    root=(treeNode*)malloc(sizeof(treeNode));
    root->data=15;
    root->lChild=NULL;
    root->rChild=NULL;

    insert(root,13);
    if(root->lChild==NULL)
          printf("root no l child\n");
     // printf("root lchild data :%d",root->lChild->data);
   return 0;
}
4

2 に答える 2

0

私は通常、次のように実装します。

void insert(treeNode* rt, int idata) {
    // assert( rt != NULL );
    if(idata < rt->data){
        if( rt->lChild != NULL)
            insert(rt->lChild, idata);
        else {
            rt->lChild = createNode();
            rt->lChild->data = idata;
        }
    } else {
        if( rt->rChild != NULL)
            insert(rt->rChild, idata);
        else {
            rt->rChild = createNode();
            rt->rChild->data = idata;
        }
    }
}

さらに、私は引数を与えることを好みますcreateNode()

treeNode* createNode(int idata){
    // ...
    nNode->data = idata;
    // ...
}

したがって、次のinsertようになります。

void insert(treeNode* rt, int idata) {
    // ...
            rt->lChild = createNode(idata);
    // ...
            rt->rChild = createNode(idata);
    // ...
}
于 2013-07-14T11:43:31.240 に答える