用兄弟孩子法构建二叉树的操作

就是将一个结点度超过2的树用兄弟孩子法转化成二叉树,来实现原先不能完成的中序,先序等操作。如以下转成可先序遍历的情况。自己根据代码慢慢带入用笔试的方法草稿一下,就懂代码实现原理了
#include
#include
#include
#define MAX_TREE_SIZE 100
using namespace std;


typedef struct CSNode{
char data;
struct CSNode *fch,*nsb;
}CSNode,*CSTree;

CSTree  CreatNode(char data)
{
	CSTree temp=new CSNode;
	temp->data=data;
	temp->fch=temp->nsb=NULL;
	return temp;

}
 

CSTree search(CSTree T,char Nodedata)
{
if(T==NULL)return NULL;
if(T->data==Nodedata)return T;        
else
{
	CSTree temp;
	temp=search(T->fch,Nodedata);
	if(temp!=NULL)return temp;
	temp=search(T->nsb,Nodedata);
	if(temp!=NULL)return temp;

}

return NULL;
}


void creattree(CSTree &T,char Node[],int degree[],int n)
{
int index=0;
T=CreatNode(Node[index++]);
CSTree p=T;
for(int i=0;i<n;i++)
	{
	int child=degree[i];
	for(int j=1;j<=child;j++)
		{
			CSTree temp=CreatNode(Node[index++]);
			if(j==1)
			{
			p->fch=temp;
			p=p->fch;
			}
			else
			{
			p->nsb=temp;
			p=p->nsb;
			}
	
	
		}
			p=search(T,Node[i+1]);


	}



}

void preorder(CSTree T)
{
if(T==NULL)
return ;
cout<<T->data<<endl;
preorder(T->fch);
preorder(T->nsb);
}














main()
{
CSTree T;
int n=8;//节点数
char node[]={'a','b','c','d','e','f','g','h'};//结点
int degree[]= {3,1,0,1,2,0,0,0};//每个结点的度
creattree(T,node,degree,n);
preorder(T);//先序打印
}

用兄弟孩子法构建二叉树的操作_第1张图片
用兄弟孩子法构建二叉树的操作_第2张图片

你可能感兴趣的:(c++,c语言,算法)