簡體   English   中英

二叉搜索樹遍歷

[英]Binary search tree traversal

大家好,我對在 BST 中插入新節點有疑問。 addNode模塊中,我試圖在 BST 中插入一個元素,但是每次添加新節點時,它都會添加到我最初從main函數傳遞的同一個根節點,而沒有在樹內部遍歷。

這是我寫的代碼。

#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;
}

我對樹的概念以及樹中的指針概念很陌生。 感謝您提供任何幫助。

...但每次添加新節點時,它都會添加到同一個根節點

這是因為您總是將它添加到同一個根目錄,如下所示

if(addNode(newOne, start))

start總是一樣的。 你可以讓addNode返回新的根並像這樣調用它:

start = addNode(newOne,start);

我會讓你來實施它。

注意參數在c++中總是按值傳遞的(除非你是按引用傳遞的),從而改變了方法內部的參數, root = dest; , 對mainstart沒有影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM