【问题标题】:Insertion in a binary tree pointer fault插入二叉树指针错误
【发布时间】:2013-07-15 13:45:39
【问题描述】:

下面给出的代码是我为插入二叉树而编写的代码。该代码适用于根节点,但不适用于其子节点。我知道我必须在插入子节点时传递对根节点的引用,但不知道如何实现它。有什么要改的?

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

struct bintree
{
int data;
struct bintree *left;
struct bintree *right;
};

typedef struct bintree btree;

btree* newnode(btree *node, int data)
{
    node=(btree*)malloc(sizeof(btree));
    node->data=data;
    node->left=NULL;
    node->right=NULL;
    return node;
}

btree* insert(btree *node, int data)
{
    if(node==NULL)
    {
        return (newnode(node, data));
    }
    else
    {
        if(data<=node->data)
        {
            insert(node->left, data);
            return(node);
        }
        else
        {
            insert(node->right, data);
            return(node);
        }
    }
}

int main()
{
    btree *root=NULL;
    root=insert(root, 5);
    insert(root, 3);
    insert(root, 6);
    return 0;
}

在此代码中,如果节点为空,则将节点发送到 newnode 函数并分配内存和数据。在其他情况下使用插入函数。

【问题讨论】:

  • 请避免使用malloc。请改用operator new

标签: c++ binary-tree insertion


【解决方案1】:

改变这个:

 if(data<=node->data)
    {
        insert(node->left, data);
        return(node);
    }
    else
    {
        insert(node->right, data);
        return(node);
    }

到:

    if(data<=node->data)
    {
        node->left = insert(node->left, data);
    }
    else
    {
        node->right = insert(node->right, data);
    }
    return (node);

你的 main 中的代码也应该是:

root = insert(root, 5);
root = insert(root, 3);
root = insert(root, 6);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2019-12-13
    • 2015-07-18
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多