2017-10-18 234 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沒有影響。