C ++二叉树打印节点

时间:2015-10-22 22:47:15

标签: c++ binary-tree

我正在学习二叉树。我在看斯坦福网站: http://cslibrary.stanford.edu/110/BinaryTrees.html 通过调用newNode()三次并使用三个指针变量来创建树有一个实践问题。 给出了struct和newNode。我试图打印出节点。

struct node { 
    int data; 
    struct node* left; 
    struct node* right; 
} ;

/* 
 Helper function that allocates a new node 
 with the given data and NULL left and right pointers. 
*/ 
struct node* newNode(int data) { 
  struct node* node = new(struct node); 
  node->data = data; 
  node->left = NULL; 
  node->right = NULL;

  return(node); 
}; 

// call newNode() three times 
struct node* build123a() { 
  struct node* root = newNode(2); 
  struct node* lChild = newNode(1); 
  struct node* rChild = newNode(3);
  root->left = lChild; 
  root->right= rChild;

  return(root); 
}

int main() {

    struct node* test = build123a();
    cout << "root: " << test->data << endl;
    cout << "left: " << test->left << endl;
    cout << "right: " << test->right << endl;

    return 0;
}

问题是这只打印出root中的整数。 对于左侧和右侧节点,它会打印出地址位置。 我对指针的了解仍然有点不稳定。但是,我只能回归根本不重要吗? newNode是一个指向节点的指针吗? 只是寻找一个简单的解决方案来打印出左右节点。

4 个答案:

答案 0 :(得分:2)

那是因为'左'和'正确'指针。

要打印出左侧或右侧的“数据”,请按以下步骤更改代码:

cout&lt;&lt; “left:”&lt;&lt; test-&gt; left-&gt; data&lt;&lt; ENDL;

cout&lt;&lt; “对:”&lt;&lt; test-&gt; right-&gt; data&lt;&lt; ENDL;

但是,请注意,如果向左或向右为NULL(即为零),则可能会出现内存访问异常。

答案 1 :(得分:1)

test->left(*test).left,其类型为struct node*

要在left中打印您需要的数据

cout << (test -> left -> data);

答案 2 :(得分:1)

您可以正确打印“test-&gt; data”,因为这是一个int。问题是“test-&gt; left”和“test-&gt; right”是指针,而指针基本上是指代另一个对象存储位置的数字。

如果要打印左侧节点的数据,则必须执行以下操作:

cout << "left: " << test->left->data << endl;

然后你必须为正确的节点做同样的事情。

答案 3 :(得分:1)

struct node { 
    int data; // the actual data contained inside this node
    struct node* left; // a node pointer that points to the left child
    struct node* right; // a node pointer that points to the right child
};

struct node* test; // is a node pointer
test->left; // is a node pointer that points to the left child of test
test->right; // is a node pointer that points to the right child of test

cout << test->data; // prints the integer contained within the test node
cout << test->left; // prints the address of the left child of test since it's a pointer
cout << test->right; // prints the address of the right child of test since it's a pointer

您要做的是打印左右儿童中包含的数据。

cout << test->left->data;
cout << test->right->data;