Search code examples
c++listpointerstreenodes

LinkedList ADT pointer block


I am implementing a number of LinkedList ADT's for my compsci class and I'm running into the same problem on every one. The code listed below is a binary tree ADT. The compiler gets lost when trying to input data into the new nodes. The code compiles without any errors, but the compiler does not return anything, I think it's stuck trying to find the pointer. I come from Java so I'm still working my way around pointers.

#include <iostream>
struct TreeNode {
  //represents a single node in a binary tree of int data
  int data; //immediate data
  TreeNode *left; //left subtree
  TreeNode *right; //right subtree
  TreeNode(int in);
};

TreeNode::TreeNode(int in) {
  data = in;
  left = NULL;
  right = NULL;
}

The compiler can't seem to find the pointer referenced in these two append functions.

void addLeft(TreeNode *root, int newData) {
  TreeNode *new_node;
  new_node->data = newData;
  root->left = new_node;
}
void addRight(TreeNode *root, int newData) {
  TreeNode *new_node;
  new_node->data = newData;
  root->right = new_node;
}
//counts nodes in binary tree from designated root point
int countNodes(TreeNode *root) {
  if (!root) {
    return 0; //empty tree
  }
  int count = 1;
  count += countNodes(root->left); //adds left subtree nodes
  count += countNodes(root->right); //adds right subtree countNodes
  return count;
}
void preorderPrint(TreeNode *root) { //root first, then left, then right
  if (root) {
    std::cout << root->data << " ";
    preorderPrint(root->left);
    preorderPrint(root->right);
  }
}

void postorderPrint(TreeNode *root) { //left first, then right, then root
  if (root) {
    postorderPrint(root->left);
    postorderPrint(root->right);
    std::cout << root->data << " ";
  }
}
void inorderPrint(TreeNode *root) { //left first, then root, then right
  if (root) {
    inorderPrint(root->left);
    std::cout << root->data << " ";
    inorderPrint(root->right);
  }
}
bool tree_contains(TreeNode *root, int item) {
  if (!root) {
    return false; //if the root doesn't exist, the tree doesn't exist
  }
  else if (root->data = item) {
    return true; //item is found in the root node
  }
  else if (root->data > item) {

  }
}

int main() {
  TreeNode *root;
  root->data = 5;
  addLeft(root, 4);
  addRight(root,9);
  inorderPrint(root);
  return 0;
}

Solution

  • Your root is not initialized. It currently has an undefined value. It should be:

    TreeNode *root = new TreeNode(5);
    ... // Do whatever you want
    // delete root and everything else.