树的C++实现

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

}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值