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; }
//向树中添加节点 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); } }
//在树中查找项目,返回一个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(int argc, char const *argv[]) { char ch; int i,ret; L = Create(); Output(L); printf("\n请输入右移的位数:\n"); scanf("%d",&i); ToRight(L,i); Output(L); return 0; }
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; }
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是目标项目节点地址 } }
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); } }
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); } }