#include <iostream>
using namespace std;
template<typename T>
struct ListNode
{
T data;
struct ListNode* next;
ListNode(T element)
{
data = element;
next = nullptr;
}
};
template<typename T>
struct TreeNode
{
T data;
ListNode<TreeNode<T>*>* childHead;
void AddChild(TreeNode<T>* node)
{
ListNode<TreeNode<T>*>* childnode = new ListNode<TreeNode<T>*>(childnode);
if (childHead == nullptr)
{
childHead=childnode;
}
else
{
childnode->next = childHead;
childHead = childnode;
}
}
};
template<typename T>
class Tree
{
private:
TreeNode<T>* nodes;
TreeNode<T>* root;
public:
Tree();
Tree(int maxNodes);
~Tree();
TreeNode<T>* GetTreeNode(int id);
void SetRoot(int rootId);
void AddChild(int parentId, int sonId);
void AssignData(int nodeId, T data);
void Print(TreeNode<T>* node=nullptr);
};
template<typename T>
Tree<T>::Tree()
{
nodes = new TreeNode<T>[10001];
}
template<typename T>
Tree<T>::Tree(int maxNodes)
{
nodes = new TreeNode<T>[maxNodes];
}
template<typename T>
Tree<T>::~Tree()
{
delete[] nodes;
}
template<typename T>
TreeNode<T>* Tree<T>::GetTreeNode(int id)
{
return &nodes[id];
}
template<typename T>
void Tree<T>::SetRoot(int rootId)
{
root = GetTreeNode(rootId);
}
template<typename T>
void Tree<T>::AddChild(int parentId,int sonId)
{
GetTreeNode(parentId)->AddChild(GetTreeNode(sonId));
}
template<typename T>
void Tree<T>::AssignData(int nodeId, T data)
{
GetTreeNode(nodeId)->data = data;
}
template<typename T>
void Tree<T>::Print(TreeNode<T>* node)
{
if (node == nullptr)
{
node = root;
}
cout << node->data << " ";
ListNode<TreeNode<T>*>* temp = node->childHead;
while (temp)
{
Print(temp->data);
temp = temp->next;
}
}
树的C++实现
最新推荐文章于 2024-08-14 17:18:35 发布