通过使用构造函数插入树,而不使用其他函数。

问题描述 投票:0回答:1

我试图通过使用构造函数来创建一棵简单的二进制树。

TreeNode(int val) : val(val), left(nullptr), right(nullptr) {}

我对创建二元树完全不明白。我可以通过创建插入函数来创建一棵树,但利用构造函数我不太确定。

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


using namespace std;


struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int val) : val(val), left(nullptr), right(nullptr) {}
};


TreeNode* newNode(int data)
{
    TreeNode* Node = new TreeNode();
    Node->val = data;
    Node->left = NULL;
    Node->right = NULL;

    return(Node);
}

bool isSameTree(TreeNode* p, TreeNode* q) {
    bool left;
    bool right;
    if (p == nullptr&&q == nullptr)
        return true;
    else if (p->val == q->val) {
        left = isSameTree(p->left, q->left);
        right = isSameTree(p->right, q->right);
        return left && right;
    }
    else return false;
}

void print(TreeNode* root) {
    if (root != nullptr) {
        print(root->left);
        cout << root->val << " ";
        print(root->right);
    }

}

int main() {



    TreeNode *root = newNode(1);
    root->left = newNode(2);
    root->right = newNode(3);
    root->left->left = newNode(4);
    root->left->right = newNode(5);


    TreeNode *root1 = newNode(1);
    root1->left = newNode(2);
    root1->right = newNode(3);
    root1->left->left = newNode(4);
    root1->left->right = newNode(5);

    if (isSameTree(root, root1))
        cout << "there are same tree" << endl;
    else 
        cout << "there are not same tree" << endl;

}

`````````
c++
1个回答
3
投票

你有一个单参数的构造函数,它接收节点值并将两个指针都设置为 nullptr. 也就是说,它的效果与

Node->val = data;
Node->left = NULL;
Node->right = NULL;

换句话说,你可以把所有的用法替换成 newNode(x)new TreeNode(x).

(顺便说一下:坚持 nullptr别扔了 NULL 到混合体中)。)

你可能会想添加另一个构造函数,它也可以接受子树。

TreeNode(int val, TreeNode* l, TreeNode* r)

这将让你写

TreeNode *root = new TreeNode(1, 
                              new TreeNode(2, new TreeNode(4), new TreeNode(5)), 
                              new TreeNode(3));

-1
投票

使用构造函数是这样做的。

root->left = new TreeNode(2);


-3
投票

如果你想用构造函数创建一棵简单的二进制树,你可以使用class,这比struct更好

© www.soinside.com 2019 - 2024. All rights reserved.