我试图通过使用构造函数来创建一棵简单的二进制树。
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;
}
`````````
你有一个单参数的构造函数,它接收节点值并将两个指针都设置为 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));
使用构造函数是这样做的。
root->left = new TreeNode(2);
如果你想用构造函数创建一棵简单的二进制树,你可以使用class,这比struct更好