建立一颗多叉树

      多叉树的建立是很复杂的,因为分支数目不确定,但是我们可以知道多叉树和二叉树其实是可以转化的,我们可以将其转化为二叉树。下面就是使用“子女-兄弟链法”建立的一颗树。


//Tree.h
#pragma once
#include<iostream>
using namespace std;

template<class Type>
class Tree;

template<class Type>
class TreeNode
{
	friend class Tree<Type>;
public:
	TreeNode() :data(Type()), nextsibling(NULL), firstchild(NULL)
	{}
	TreeNode(Type d, TreeNode* L = NULL, TreeNode* C = NULL) :data(d), nextsibling(L), firstchild(C)
	{}
	~TreeNode()
	{}
private:
	Type				data;
	TreeNode<Type>	* firstchild;
	TreeNode<Type>	* nextsibling;
};

template<class Type>
class Tree
{
public:
	Tree(Type Ref) :
		root(NULL)
		,Refvalue(Ref)
	{
		root = NULL;
	}
public:
	void create()
	{
		create(root);
	}
	void show()
	{
		cout << "PreOder:";
		PreOder(root);
		cout << endl;
	}
protected:
	void create(TreeNode<Type>*& t)
	{
		Type item;
		cin >> item;
		if (item == Refvalue)
		{
			t = NULL;
			return;
		}
		else
		{
			t = new TreeNode<Type>(item);
			create(t->firstchild);
			create(t->nextsibling);
		}
	}

	bool empty()
	{
		return root == NULL;
	}

	void PreOder(TreeNode<Type>*& t)
	{
		if (t == NULL)
			return;
		else
		{
			cout << t->data << " "; PreOder(t->firstchild);
			PreOder(t->nextsibling);
		}
	}
private:
	TreeNode<Type>	*root;
	Type				Refvalue;
};


建立一颗多叉树有很多种方法,我这里选择的是“子女-兄弟链“法,上面是实现:

这里是先序建立的//RAD#E##BC#F##GHK#####
树的大致形态如下:


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值