An introduction to trees
This lesson contains approximately 47 minutes of video content.
    
        An introduction to trees
Binary trees
Trees with unbound branching
Other tree representations
Activity: Branching Tree
Graded Playground Autograder
  Activity Prompt:
  In this activity, you will implement a 
Your 
How do I interact with 
If you're curious about how you should interact with an 
BranchingTree<T>.  The BranchingTree<T> type will contain a single private data member named root_ that is typed Node<T>*.  We will now introduce the types involved in this assignment and what you're responsible for implementing.
Node<T>
| public: | |
Node<T>* parent | 
Points to a respective node's parent node in the tree structure | 
std::list<Node<T>*> children | 
A list of pointers to the individual node's children | 
T data | 
T data, the data stored in the node. | 
BranchingTree<T>
Your BranchingTree<T> implementation will define three public behaviors and one private data member:
| public: | |
BranchingTree(const T& data) | 
Parameterized constructor: initializes a new BranchingTree<T> object with a single node with data pointed to by root_.  | 
const Node<T>* GetRoot() const  | 
Completed for you. Returns a pointer pointing to the tree's root node (read-only). | 
Node<T>* GetRoot() | 
Completed for you. Returns a pointer pointing to the tree's root node. | 
| private: | |
Node<T>* root_;
 | Pointer to the root of the BranchingTree<T>. | 
Non-member helper functions
You will also define two non-member helper function templates.Node<T>* InsertChild(Node<T>* parent, T data) | 
If the parent's children list does not contain a node with data, inserts a new node whose data is data and parent is parent into the parent's children list; otherwise, throws an exception. Returns the address of the new node. | 
unsigned int FindDepth(const Node<T>* node) | 
Returns the depth of the node in a BranchingTree<T> object. A Node<T> whose parent is nullptr has a depth of 0. | 
Both functions should throw an exception if the passed Node<T>* is nullptr.
How do I interact with std::list?
If you're curious about how you should interact with an std::list, consider this example:
std::list l;
l.push_back(11);
l.push_back(12);
for (const int& i : l) {
  std::cout << i << std::endl;
} 
#include <iostream>
#include "branching_tree.hpp"
int main() {
  /* Example Usage */
  // BranchingTree<int> bt(11);
  // auto root = bt.GetRoot();
  // auto node12 = InsertChild(root, 12);
  // auto node12_depth = FindDepth(node12);
}
    #ifndef BRANCHING_TREE_HPP
#define BRANCHING_TREE_HPP
#include "node.hpp"
template<typename T>
class BranchingTree {
public:
  BranchingTree(const T& data);
  const Node<T>* GetRoot() const {return root_;}
  Node<T>* GetRoot() {return root_;}
private:
  Node<T>* root_;
};
// helper function declarations
template<typename T>
Node<T>* InsertChild(Node<T>* parent, T data);
template<typename T>
unsigned int FindDepth(const Node<T>* node);
// implementations
template<typename T>
BranchingTree<T>::BranchingTree(const T& data) {
  // does something;
}
template<typename T>
Node<T>* InsertChild(Node<T>* parent, T data) {
  // does something;
  return nullptr;
}
template<typename T>
unsigned int FindDepth(const Node<T>* node) {
  // does something else;
  return 0;
}
#endif
    #include "branching_tree.hpp"
    #ifndef NODE_HPP
#define NODE_HPP
#include <list>
template<typename T>
struct Node {
  T data;
  Node<T>* parent = nullptr;
  std::list<Node<T>*> children;
};
#endif
    
  Submit is not supported in this site.