当前位置: 首页 > 知识库问答 >
问题:

如何从嵌套类中访问指针?

令狐运珧
2023-03-14

此类的目的是模拟二进制搜索树的功能。在下面的代码中,我试图将它从一个结构和一堆函数改编成一个包装类,称为BST。但是,我不确定的一件事是如何从节点结构中访问“根”。Root当前在BST类中声明。

class bst
{
public:
struct Node
{
    public:
    int data;
    struct Node *left;
    struct Node *right;


    Node* FindMin(Node* root)
    {
        while(root->left != NULL) root = root->left;
        return root;
    }

    Node* Insert(Node *root,int data)
    {
        if(root == NULL) {
            root = new Node();
            root->data = data;
            root->left = root->right = NULL;

            //Update Height & Size
            bstHeight = 0;
            bstSize = 0;
        }
        else if(data <= root->data)
            root->left = Insert(root->left,data);
        else
            root->right = Insert(root->right,data);
        return root;

    }

    Node* Delete(struct Node *root, int data)
    {
        if(root == NULL) return root;
        else if(data < root->data) root->left = Delete(root->left,data);
        else if (data > root->data) root->right = Delete(root->right,data);
        //Value found
        else {
            // Case 1:  No child
            if(root->left == NULL && root->right == NULL)
            {
                delete root;
                root = NULL;

                //Update Height & Size
                bstHeight = 0;
                bstSize = 0;
            }
            //Case 2: One child
            else if(root->left == NULL)
            {
                struct Node *temp = root;
                root = root->right;
                delete temp;

                //Update Height & Size
                bstHeight = 0;
                bstSize = 0;
            }
            else if(root->right == NULL)
            {
                struct Node *temp = root;
                root = root->left;
                delete temp;

                //Update Height & Size
                bstHeight = 0;
                bstSize = 0;
            }
            // case 3: 2 children
            else
            {
                struct Node *temp = FindMin(root->right);
                root->data = temp->data;
                root->right = Delete(root->right,temp->data);

                //Update Height & Size
                bstHeight = 0;
                bstSize = 0;
            }
        }
        return root;
    }

    //# of Nodes in tree
    void size(Node *root)
    {
        //Check if end
        if(root == NULL) return;
        //Not end
        else
        {
            bstSize = bstSize + 1;
            size(root->left);       //Visit left subtree
            size(root->right);      // Visit right subtree

        }
    }

    void height(Node *root, int temp)
    {
        //Check if end
        if(root == NULL)
        {
            if(temp > bstHeight)
            {
                bstHeight = temp;
            }

            return;
        }

        //Not end
        else
        {
            temp = temp + 1;
            height(root->left, temp);       //Visit left subtree
            height(root->right, temp);      // Visit right subtree

        }
    }

    //Function to visit nodes in Inorder
    void show()
    {
        if(root == NULL) return;

        show(root->left);       //Visit left subtree
        printf("%d ",root->data);  //Print data
        show(root->right);      // Visit right subtree
    }

    void check(Node *root)
    {
        //End of a 'branch'
        if(root == NULL) return;

        int value = 0;
        value = root->data;

        //Checking left subtree
        if(value < root->left->data)
        {
            //Tree is NOT valid
            valid = 0;
        }

        //Checking right subtree
        if(value > root->right->data)
        {
            //Tree is NOT valid
            valid = 0;
        }

        check(root->left);       //Visit left subtree
        printf("%d ",root->data);  //Print data
        //check(root->right);      // Visit right subtree
    }

};
Node* root = NULL;
};

具体来说,在show函数中。它不像把它和其他函数放在节点中那样简单,因为根需要是唯一的,并且新节点至少被调用一次。Show将不会在当前状态下编译,我不确定从这里开始。

共有1个答案

严修诚
2023-03-14

尽管这条评论说明了一切,但让我给出一个额外的提示:

当你想让你的代码尽可能与现在的代码相似时,试着向Node类添加一个构造函数,该构造函数需要一个指向根的指针或引用(最好是这样),并检查每次你创建一个节点时,你是否将根交给了构造函数。

顺便说一句,在C语言中查看一些简单的基于节点的数据结构实现可能是更好的方法,例如在线程中

C语言中的简单链表

 类似资料:
  • 问题内容: 我希望这段代码可以说明问题: 我知道我可能做错了什么,因为继承可能不应该以这种方式使用。但这是我遇到的最简单的方法。而且,除此之外,我很好奇。可能吗? 问题答案: 似乎起作用。 根据JLS第15.12节 班级名称 。超级。NonWildTypeArguments_opt标识符(ArgumentList_opt) 是有效的MethodInvocation

  • {“_index”:“pie”,“_type”:“flare”,“_id”:“2”,“_version”:1,“_score”:1,“_source”:{“id”:2,“父级”:1,“data”:{“memory”:50}}}

  • 问题内容: 我有一个Java的HashMap,其内容(大家可能都知道)可以由 如果在另一个HashMap中有一个HashMap,即嵌套的HashMap,我将如何访问内容?我可以这样做吗,内联: 谢谢。 问题答案: 您可以像假设的那样进行操作。但是您的HashMap必须模板化: 否则,从第一张地图检索第二张地图后,您必须进行强制转换。

  • }; 因此,我创建了一个对象变量“stock”。包含不同产品的代码、名称、成本和数量。 后来,我创建了一个函数“viewAllStock()”来在我的网站(超文本标记语言)中创建一个表。但是当我运行这个程序时,我在我创建的“产品代码”单元格下得到它 产品代码 [对象对象] [对象对象] [对象对象] [对象对象] [对象对象] 那么,如何使用Javascript在网站(超文本标记语言)中获取标题“

  • 问题内容: 假设我有json数据,例如 现在我正在从该json数据访问字段,例如: 如何以最有效的方式从给定的json数据访问第三个字段()? 不起作用 一种可能是我使用for循环构造字符串,然后进行eval评估,但是有没有有效的方法呢? 问题答案: 老实说,我无法理解您的问题。JSON已经结构化了,为什么需要更改结构? 在您的情况下,我将按以下方式访问它: 如果碰巧希望 遍历 数据,则需要: 更

  • 我试图解析一个OpenAPI JSON文件,并访问值来构建一个rest模型类。我尝试使用对象映射器解析JSON文件,并将其发送到一个接收