示例#1
0
//向树中添加节点
static void AddNode(Node * new_node,Node * root)
{
	if(ToLeft(&new_node->queue->head->item,&root->queue->head->item))
	{
		if(root->left == NULL)
		{
			root->left = new_node;
		}
		else
		{
			AddNode(new_node,root->left);
		}
	}
	else if(ToRight(&new_node->queue->head->item,&root->queue->head->item))
	{
		if(root->right == NULL)
		{
			root->right = new_node;
		}
		else
		{
			AddNode(new_node,root->right);
		}
	}
	else
	{
		fprintf(stderr,"location error int AddNode()\n");
		exit(EXIT_FAILURE);
	}
}
示例#2
0
static Pair SeekItem(const Item * pi, const Tree * ptree)
{
	Pair look;
	look.parent = NULL;
	look.child = ptree->root;

	if(look.child == NULL)
		return look;	/*树为空树*/
	while(look.child != NULL)
	{
		if(ToLeft(pi,&(look.child->item)))
		{
			look.parent = look.child;
			look.child = look.child->left;
		}
		else if(ToRight(pi,&(look.child->item)))
		{
			look.parent = look.child;
			look.child = look.child->right;
		}
		else
			break;
	}

	return look;
}
示例#3
0
//在树中查找项目,返回一个pair结构体
static Pair SeekItem(const Item * pi,const Tree * ptree)
{
	Pair look;
	
	look.parent = NULL;//根节点的父节点为NULL
	look.child = ptree->root;//从根节点开始查找
	if(look.child == NULL)//树为空
		return look;
	while(look.child != NULL)
	{
		if(ToLeft(pi,&(look.child->queue->head->item)))//如果目标项目在当前节点,即根节点的左边
		{
			look.parent = look.child;//将父节点设置为当前节点
			look.child = look.child->left;//将当前节点设置为根节点的左节点
		}
		else if(ToRight(pi,&(look.child->queue->head->item)))//如果目标向在当前节点的右边
		{
			look.parent = look.child;//将父节点设置为当前节点
			look.child = look.child->right;//将当前节点设置为根节点的右节点
		}
		else//如果既不在root根节点的左边也不在右边,那么目标节点就是根节点,或者未找到目标项目
		{
			break;//跳出循环
		}
	}
	return look;//返回存有查找到包含父节点指针和当前节点指针的结构体
}
int main()
{
	while(gets(str))
	{
		length=strlen(str);
		for(int i=length;i>0;--i)
			if(i%2!=0)//奇数步左旋(逆时针)
				ToLeft(i);
			else
				ToRight(i);
		printf("%s\n",str);
	}
	return 0;
}
示例#5
0
static Pair SeekItem(const Item *pi, const Tree *ptree){
	Pair look;
	look.parent = NULL;
	look.child = ptree->root; 
	if(!look.child)
		return look; 
	while(look.child){
		if(ToLeft(pi,&(look.child->item))){
			look.parent = look.child;
			look.child = look.child->left;
		}else if(ToRight(pi,&(look.child->item))){
			look.parent = look.child;
			look.child = look.child->right;
		}else 
			break; //如果前两种情况都不相等,则必为相等情况,look.child是目标项目节点地址
	}
}
示例#6
0
static void AddNode(Node * new_node,Node *root){
	if(ToLeft(&new_node->item,&root->item)){
		if(!root->left){
			root->left = new_node; //空子树
		}else{
			AddNode(new_node,root->left); //处理该子树
		}
	}else if(ToRight(&new_node->item,&root->item)){
		if(!root->right){
			root->right=new_node;
		}else{
			AddNode(new_node,root->right);
		}
	}else{ //不含用相同的项目
		fprintf(stderr,"Location error in AddNode()\n");
		exit(1);
	}
}
示例#7
0
static void AddNode(Node * new_node, Node * root)
{
	if(ToLeft(&new_node->item,&root->item))
	{
		if(root->left == NULL)
			root->left = new_node;
		else
			AddNode(new_node,root->left);
	}
	else if(ToRight(&new_node->item,&root->item))
	{
		if(root->right == NULL)
			root->right = new_node;
		else
			AddNode(new_node,root->right);
	}
	else
	{
		fprintf(stderr,"location error in AddNode().\n");
		exit(1);
	}
	
}