【问题标题】:Binary search tree traversal二叉搜索树遍历
【发布时间】:2017-10-18 18:20:22
【问题描述】:

大家好,我对在 BST 中插入新节点有疑问。在 addNode 模块中,我试图在 BST 中插入一个元素,但每次添加一个新节点时,它都会添加到我从 ma​​in 传递的同一个根节点函数最初没有在树内遍历。

这是我写的代码。

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

我对树的概念以及树中的指针概念都很陌生。感谢您提供任何帮助并感谢您。

【问题讨论】:

  • 指针没有什么特别之处。分配给指针参数与分配给int 参数没有区别。

标签: c++ tree binary-search-tree tree-traversal


【解决方案1】:

...但是每次添加新节点时,它都会添加到同一个根 节点

这是因为你总是将它添加到同一个根目录,就像这里

if(addNode(newOne, start))

start 始终相同。你可以让addNode 返回新的根并这样调用它:

start = addNode(newOne,start);

我会留给你来实现它。

请注意,在 c++ 中参数总是按值传递(除非您通过引用传递),因此更改方法内部的参数 root = dest; 对 main 中的 start 没有影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-09
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    相关资源
    最近更新 更多