2017-10-18 237 views
-2

嗨,大家好,我对在BST中插入一个新节点有疑问。在addNode模块我试图在BST中插入一个元素,但每次添加一个新节点时,它都会添加到同一个根节点,我通过主要函数最初没有在树内遍历。二叉搜索树遍历

这是我写的代码。

#include<stdio.h> 
#include<stdlib.h> 
#include<cstdio> 
#include<iostream> 
using namespace std; 
struct node 
{ 
    int data; 
    struct node *left; 
    struct node *right; 
}; 
struct node* newNode(int data) 
{ 
    node* temp = (node*)malloc(sizeof(struct node)); 
    //struct temp = new node; 
    temp->data = data; 
    temp->left = NULL; 
    temp->right = NULL; 
    return(temp); 
}; 
int addNode(node *dest, node *root) 
{ 
    if(root == NULL) 
    { 
     cout<<"adding data to node for "<< dest->data<<endl; 
     root = dest; 
     cout<<"ROOT VALUE = root->data "<<root->data<<endl; 
     return 1; 
    } 
    if(dest->data > root->data) 
    { 
     cout<<"Traverse right for "<<dest->data<<endl; 
     addNode(dest, root->right); 
    } 
    else if(dest->data < root->data) 
    { 
     cout<<"Traverse left for "<<dest->data<<endl; 
     addNode(dest, root->left); 
    } 
} 
void printNodes(node *root) 
{ 
    if(root != NULL) 
    { 
     printNodes(root->left); 
     if(root->left != NULL && root->right != NULL) 
      std::cout<< root->data <<" "; 
     printNodes(root->right); 
    } 
} 
int main() 
{ 
    int i, j, k, flag; 
    int arr[6] = {4, 2,8, 1, 0, 10}; 
    node *start = newNode(arr[0]); 
    for(i = 1; i < 6; i++) 
    { 
     node *newOne = newNode(0); 
     newOne->data = arr[i]; 
     cout<<"NODE DATA - start->data "<<start->data; 
     if(addNode(newOne, start)) 
      std::cout<<"\nNode added"<<endl; 
    } 
    printNodes(start); 
    return 1; 
} 

我对树木概念以及树木中的指针概念相当陌生。任何帮助表示感谢,并感谢你。

+0

指针没有什么特别之处。分配给指针参数与分配给“int”参数没有区别。 – molbdnilo

回答

0

...但同时增加了它被添加到同一个根 节点的新节点,每次

这是因为你一直在增加它同根生,这里

if(addNode(newOne, start)) 

start总是相同的。你可以做addNode返回新根,并调用它像:

start = addNode(newOne,start); 

我会让你来实现它。

注意,参数由值在C总是通过++(除非通过按引用),从而改变了方法,root = dest;内部的参数,对在mainstart没有影响。