取消引用指向二叉树中节点的指针
Dereferencing Pointer to Node in Binary Tree
#include <bits/stdc++.h>
using namespace std;
struct Node
{
int key;
struct Node *left;
struct Node *right;
Node(int k){
key=k;
left=right=NULL;
}
};
int main() {
Node *root=new Node(1);
root->left=new Node(2);
root->right=new Node(3);
cout<<*root<<endl;
}
为什么这段代码会抛出错误?我试图通过执行 *root 来取消引用根节点,但它不起作用。 *root 表示什么?
您必须为结构重载 ostream 运算符:
std::ostream& operator<<(std::ostream& os, const Node& node)
{
if (os.good())
{
os << node.key << std::endl;
// print pointer here if needed
// ...
}
}
或者直接写:
cout << root->key << endl;
*root
只是取消引用指针并且是 Node
类型。在 C++ 中,您必须指定如何打印复杂的数据结构,这与 python 等其他语言不同。这就是为什么你不能写 cout << *root << endl;
.
比较复杂的数据结构也是如此。因此,您必须重载 ==-operator.
bool operator==(Node *lnode, Node *rnode)
{
return lnode->key == rnode->key;
}
#include <bits/stdc++.h>
using namespace std;
struct Node
{
int key;
struct Node *left;
struct Node *right;
Node(int k){
key=k;
left=right=NULL;
}
};
int main() {
Node *root=new Node(1);
root->left=new Node(2);
root->right=new Node(3);
cout<<*root<<endl;
}
为什么这段代码会抛出错误?我试图通过执行 *root 来取消引用根节点,但它不起作用。 *root 表示什么?
您必须为结构重载 ostream 运算符:
std::ostream& operator<<(std::ostream& os, const Node& node)
{
if (os.good())
{
os << node.key << std::endl;
// print pointer here if needed
// ...
}
}
或者直接写:
cout << root->key << endl;
*root
只是取消引用指针并且是 Node
类型。在 C++ 中,您必须指定如何打印复杂的数据结构,这与 python 等其他语言不同。这就是为什么你不能写 cout << *root << endl;
.
比较复杂的数据结构也是如此。因此,您必须重载 ==-operator.
bool operator==(Node *lnode, Node *rnode)
{
return lnode->key == rnode->key;
}