【发布时间】:2021-05-29 00:48:46
【问题描述】:
这是来自极客的极客示例。最后一个例子是 root->left->left = new Node(4); 我想知道左节点如何保留其旧值,并且能够使用相同的结构变量连接到新值。每次调用“新节点()”时都会创建另一个内存块还是什么?我很困惑。
using namespace std;
struct Node {
int data;
struct Node* left;
struct Node* right;
// val is the key or the value that
// has to be added to the data part
Node(int val)
{
data = val;
// Left and right child for node
// will be initialized to null
left = NULL;
right = NULL;
}
};
int main()
{
/*create root*/
struct Node* root = new Node(1);
/* following is the tree after above statement
1
/ \
NULL NULL
*/
root->left = new Node(2);
root->right = new Node(3);
/* 2 and 3 become left and right children of 1
1
/ \
2 3
/ \ / \
NULL NULL NULL NULL
*/
root->left->left = new Node(4);
/* 4 becomes left child of 2
1
/ \
2 3
/ \ / \
4 NULL NULL NULL
/ \
NULL NULL
*/
return 0;
}
【问题讨论】:
-
是的,
new就是这样做的。您的 C++ 教科书中是否有关于new工作原理的解释以及您不清楚的内容?您的问题不清楚。 -
所以也许我不清楚
Node* root的指针是如何指向的但是当struct Node* root = new Node(1);这将返回一个指向Node(1) 的内存位置的指针,对吗?那么,当我们每次都继续分配内存时,这是否会创建每次指向的新内存块,还是会保留相同的内存地址?如果保留相同的内存地址,Node(2)、Node(3)、Node(4)分别存放在哪里,root->left->left = new Node(4);说根-> 现在在下树时绑定到left的第一个实例? -
同样,
new的工作原理在每一本 C++ 教科书中都有解释。你的教科书如何解释new,你能引用一段你不清楚的简短摘录吗? -
@Zboyz 嗯...如果我正确阅读了您的评论,您是在问发生了两件事中的哪一个。对于第二个选项(“保留相同的内存地址”,无论这意味着什么),您会提出一个无法实现该选项的原因列表。那么为什么会出现混乱呢?所有迹象都指向第一个选项,不是吗?你似乎已经知道答案了。忽略你的想象力(也就是第二个选项)并选择第一个。
标签: c++ data-structures binary-tree