簡體   English   中英

二叉樹根為空

[英]Binary Tree root is null

我正在嘗試創建一個二叉搜索樹,但它似乎不起作用。 我調試了它,它說根為空。 我不明白為什么它是空的。 我最初在構造函數中將它設置為 null,但是當我調用 insert() 方法時,它不再為 null,對嗎? 有人可以幫助我理解這一點。 謝謝。

#include "stdafx.h"
    #include <iostream>

using namespace std;


struct node
{
public:
    int value;
    node * left;
    node * right;
};


class bTree
{
public:
    node * root;

public:
    bTree();
    void insert(node * r, int val);
    void insert(int val);
    void traversePreorder();
    void traversePreorder(node * r);


};

bTree::bTree()
{
    root = NULL;
}

void bTree::insert(node * r, int val)
{
    if (r == NULL)
    {
        r = new node();
        r->value = val;
        r->left = NULL;
        r->right = NULL;
        return;
    }
    else
    {
        if (val <= r->value)
        {
            insert(r->left, val);
        }
        else
        {
            insert(r->right, val);
        }
    }
}

void bTree::insert(int val)
{
    insert(root, val);
}

void bTree::traversePreorder(node * r)
{
    if (root == nullptr)
        return;
    else
    {
        cout << root->value << " ";
        traversePreorder(root->left);
        traversePreorder(root->right);
    }
}

void bTree::traversePreorder()
{
    traversePreorder(root);
}

int main()
{
    bTree * myTree = new bTree();

    myTree->insert(30);

    myTree->insert(40);
    myTree->insert(20);
    myTree->insert(10);
    myTree->insert(50);


    myTree->traversePreorder();

    return 0;
}

如果你調試到void bTree::insert(node * r, int val) ,你會發現root根本沒有改變。

void bTree::insert(node * r, int val)r是按值傳遞的,因此函數內部r的變化( new等)與外部變量( root )無關。 您可以將其更改為通過引用傳遞:

void bTree::insert(node *& r, int val)

請參閱按引用傳遞與按值傳遞之間的區別是什么?
如何將對象傳遞給 C++ 中的函數?

順便說一句:在void bTree::traversePreorder(node * r) ,您應該使用r ,而不是root

void bTree::traversePreorder(node * r)
{
    if (r == nullptr) 
        return;
    else
    {
        cout << r->value << " ";
        traversePreorder(r->left);
        traversePreorder(r->right);
    }
}

居住

暫無
暫無

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

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