C++ 树源代码

树代码,见下

#include

using namespace std;

template
struct ListNode{
	T data;
	ListNode *next;
	ListNode(T d):data(d), next(NULL){}
};

template
struct TreeNode{
	T data;
	ListNode*> *childrenHead;
	void AddChild( TreeNode* node){
		ListNode< TreeNode*> *childNode = new ListNode*>(node);
		if(childrenHead == NULL){
			childrenHead = childNode;
		}else{
			childNode->next = childrenHead;
			childrenHead = childNode;
		}
	}
};

template
class Tree{
private:
	TreeNode *nodes;
	TreeNode *root;
public:
	Tree();
	Tree(int maxNodes);
	~Tree();
	TreeNode* GetTreeNode(int id);
	void SetRoot(int rootId);
	void AddChild(int parentId, int sonId);
	void AssignData(int nodeId, T data);
	void Print(TreeNode *node = NULL);	
};

template
Tree::Tree(){
	nodes = new TreeNode[100001];
}

template
Tree::Tree(int maxNodes){
	nodes = new TreeNode[maxNodes];
}

template
Tree::~Tree(){
	delete [] nodes;
}

template
TreeNode* Tree::GetTreeNode(int id){
	return &nodes[id];
}

template
void Tree::SetRoot(int id){
	root = GetTreeNode(id);
}

template
void Tree::AddChild(int parentId, int sonId){
	TreeNode *parentNode = GetTreeNode(parentId);
	TreeNode *sonNode = GetTreeNode(sonId);
	parentNode->AddChild(sonNode);
}

template
void Tree::AssignData(int id, T data){
	GetTreeNode(id)->data = data;
}

template
void Tree::Print(TreeNode* node){
	if(node == NULL){
		node = root;
	}
	cout << node->data;
	ListNode *> *tmp = node->childrenHead;
	while(tmp){
		Print(tmp->data);
		tmp = tmp->next;
	}
}

int main(){
	Tree T(9);
	T.SetRoot(0);
	T.AssignData(0, 'a');
	T.AssignData(1, 'b');
	T.AssignData(2, 'c');
	T.AssignData(3, 'd');
	T.AssignData(4, 'e');
	T.AssignData(5, 'f');
	T.AssignData(6, 'g');
	T.AssignData(7, 'h');
	T.AssignData(8, 'i');
	T.AddChild(0, 2);
	T.AddChild(0, 1);
	T.AddChild(1, 3);
	T.AddChild(2, 5);
	T.AddChild(2, 4);
	T.AddChild(3, 8);
	T.AddChild(3, 7);
	T.AddChild(3, 6);
	
	T.Print();
}

你可能感兴趣的:(c++,深度优先,开发语言)