树及其前序遍历 - 代码错误

时间:2017-03-31 05:53:47

标签: c++ c++11

#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;

struct Node  //Tree Node
{
    int key;
    struct Node *left;
    struct Node *right;
}; 

int nodes[21], counter; //nodes[] array keeps all the nodes of the tree 
                        //in increasing order
                        //counter tracks the current index of the array

void preorder(Node* node){    //Preorder traversal of the tree
    if(node==NULL){
        return;
    }
    preorder(node->left);
    nodes[counter++]=node->key;
    preorder(node->right);
}

struct Node* createNode(int key){     //Tree Node Creation
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->key = key;
    newNode->left = NULL;
    newNode->right = NULL;
    return newNode;    
}

void createTree(struct Node* newNode, struct Node* node){  //Creates a 
                                                     //binary search tree
    if(!node){
        node=newNode;    //Problem Line 
        return;
    }
    if(newNode->key<node->key){
        createTree(newNode, node->left);    
    }
    else if(newNode->key>node->key){
        createTree(newNode, node->right);    
    }
}

int main(){
    int node_count, node_value;
    struct Node* root = NULL;
    cout<<"Enter number of nodes"<<endl;
    cin>>node_count;
    cout<<"Enter node values in a space-separated format"<<endl;
    for(int i=0;i<node_count;i++){
        cin>>node_value;
        struct Node* newNode = createNode(node_value);
        if(!root){
            root = newNode;
        }
        else{
            createTree(newNode, root); 
        }
        cout<<root->left<<" "<<root->right<<endl;
    }
    counter=0;
    preorder(root);
    for(int i=0;i<counter;i++){
        cout<<nodes[i]<<" ";    
    }
    cout<<endl;

    getch();
    return 0;
}

上面是创建BST然后将其前序遍历存储在数组中的代码。我已经提到了问题行(指针的分配没有发生)。有人可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

从函数返回后,指定指针不会影响该值....请阅读有关pointer point to pointerpassing-arguments by reference in cpp

的更多信息

以下代码可以解决部分问题,但不是全部,我相信您的代码中一定存在更多问题,但我不想浪费时间进行调试。

void createTree(struct Node* &newNode, struct Node* &node){  //Creates a 
                                                     //binary search tree
    if(!node){
        node=newNode;    //Problem Line 
        return;
    }
    if(newNode->key<node->key){
        createTree(newNode, node->left);    
    }
    else if(newNode->key>node->key){
        createTree(newNode, node->right);    
    }
}

答案 1 :(得分:0)

您没有将任何节点分配给左右指针。 这应该可以解决问题。

void createTree(struct Node* newNode, struct Node* node) { 
    if (!node) {
        node = newNode;
        return;
    }

    if (newNode->key < node->key) {
        // if left node is null assign new node
        if (!node->left) {
            node->left = newNode;
            return;
        }
        else {
            createTree(newNode, node->left);
        }
    }
    else if (newNode->key > node->key) {
        // if right node is null assign new node
        if (!node->right) {
            node->right = newNode;
            return;
        }
        else {
            createTree(newNode, node->right);
        }
    }
}