取消引用指向二叉树中节点的指针

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;
}