二叉树用C++如何实现?

Python012

二叉树用C++如何实现?,第1张

二叉树是程序应用得比较多的一种结构。它可以反映物体之间的层次结构,还能通过孩子和双亲反映两物体之间某些特殊关系;排序二叉树还能帮助我们进行排序,并因此而提供快速的查找;二叉树基础上的伸展树能不断地优化我们系统的结构。并查集能很好地让进行分类;小根堆能帮助快速找到值最小的结点,它是优先队列的雏形。所有的这些都是以二叉树为基础的。

实现的二叉树的基本功能包括前中后序的递归和非递归访问,求结点个数和叶子结点个数,还有求树高。这些是用C++类实现的。

BTree.h文件(类声明文件)

[cpp] view plain copy

#ifndef BTREE_H  

#define BTREE_H  

  

struct BTreeNode  

{  

    int data  

    BTreeNode *lChild,*rChild  

}  

  

class BTree  

{public:  

    void setRoot(BTreeNode* r){ root=r}  

    BTreeNode* getRoot(){ return root}  

  

    //中序遍历(递归)  

    void inOrder()  

    //中序遍历(非递归)  

    void NotReInOrder()  

    BTreeNode* createBTree()  

  

    //前序遍历(递归)  

    void preOrder()  

    //前序遍历(非递归)  

    void NotRePreOrder()  

  

    //后序遍历(递归)  

    void postOrder()  

      

    //后序遍历(非递归)  

    void NotRePostOrder()  

  

    //求结点个数  

    int BTreeSize()  

    //求叶子结点个数  

    int BTreeLeaves()  

  

    //求树高  

    int BTreeHeight()  

    //层次法求树高  

    int layerHeight()  

      

protected:  

    //中序遍历  

    void inOrder(BTreeNode*)  

    //前序遍历  

    void preOrder(BTreeNode*)  

    //后序遍历  

    void postOrder(BTreeNode*)  

      

    //结点个数  

    int BTreeSize(BTreeNode*)  

    //叶子结点  

    int BTreeLeaves(BTreeNode*)  

  

    //树高  

    int BTreeHeight(BTreeNode*)  

private:  

    BTreeNode* root  

}  

  

#endif  

BTree.cpp(类的实现文件)

[cpp] view plain copy

#include <iostream>  

#include <stack>  

#include <queue>  

#include "BTree.h"  

using namespace std  

  

//建立二叉树的算法  

BTreeNode* BTree::createBTree()  

{  

    BTreeNode* current=0  

    int val=0  

  

    cin>>val  

  

    //-1的个数比数值的个数多1  

    if(val==-1)  

        return NULL  

    else  

    {  

        current=new BTreeNode  

        current->data=val  

        current->lChild=createBTree()  

        current->rChild=createBTree()  

        return current  

    }  

      

}  

  

//利用重载的方法  

void BTree::inOrder()  

{  

    inOrder(root)  

    cout<<endl  

}  

  

//中序访问二叉树(递归)  

void BTree::inOrder(BTreeNode* r)  

{  

    if(r!=0) //是if,而不是while  

    {  

        inOrder(r->lChild) //递归访问  

        cout<<r->data<<" "  

        inOrder(r->rChild) //递归访问  

    }  

}  

  

//中序遍历(非递归)  

void BTree::NotReInOrder()  

{  

    stack<BTreeNode*> s  

  

    BTreeNode* r=getRoot()  

  

    while(!s.empty()||r!=0)  

    {  

        while(r!=0)  

        {  

            s.push(r)  

            r=r->lChild  

        }  

  

        if(!s.empty())  

        {  

            r=s.top()  

            s.pop()  

            cout<<r->data<<" "  

            r=r->rChild  

        }  

    }  

}  

  

//重载形式  

void BTree::preOrder()  

{  

    preOrder(root)  

    cout<<endl  

}  

  

//前序递归访问二叉树(递归)  

void BTree::preOrder(BTreeNode* r)  

{  

    if(r!=0) //是if,而不是while  

    {  

        cout<<r->data<<" "  

        preOrder(r->lChild) //递归访问  

        preOrder(r->rChild) //递归访问  

    }  

}  

  

  

//前序遍历(非递归)  

void BTree::NotRePreOrder()  

{  

    stack<BTreeNode*> s  

    BTreeNode* r=getRoot()  

    s.push(r)  

  

    while(!s.empty())  

    {  

        r=s.top()  

        s.pop()  

  

        cout<<r->data<<" "  

  

        if(r->rChild!=0)  

            s.push(r->rChild)  

        if(r->lChild!=0)  

            s.push(r->lChild)  

    }  

}  

  

  

//重载形式  

void BTree::postOrder()  

{  

    postOrder(root)  

    cout<<endl  

}  

  

//后序遍历(递归)  

void BTree::postOrder(BTreeNode* r)  

{  

    if(r!=0) //是if,而不是while  

    {  

        postOrder(r->lChild) //递归访问  

        postOrder(r->rChild) //递归访问  

        cout<<r->data<<" "  

    }  

}  

  

  

//后序非递归访问要定义新的结构体类型  

struct Node  

{  

    BTreeNode* tp  

    bool flag  

}  

  

//后序遍历(非递归)  

void BTree::NotRePostOrder()  

{  

    Node node //定义Node结构体的一个结点  

    stack<Node> s  

  

    BTreeNode* r=getRoot()  

    while(!s.empty()||r!=0)  

    {  

        while(r!=0)  

        {  

            node.tp=r  

            node.flag=0  

            s.push(node)  

            r=r->lChild  

        }  

  

        if(!s.empty())  

        {  

            node=s.top()  

            s.pop()  

            r=node.tp //将栈顶的BTreeNode*部分赋给r  

            if(node.flag==1)  

            {  

                cout<<r->data<<" "  

                r=0 //表示已经访问了该结点  

            }  

            else  

            {  

                node.flag=1  

                s.push(node)  

                r=r->rChild  

            }  

        }  

    }  

}  

  

  

//重载形式  

int BTree::BTreeSize()  

{  

    return BTreeSize(root)  

}  

  

//求二叉树结点个数的函数  

int BTree::BTreeSize(BTreeNode* r)  

{  

    //二叉树的结点个数为左右子树的高度之和再+1  

    if(r==0) return 0   

    else  

        return 1+BTreeSize(r->lChild)+BTreeSize(r->rChild)  

}  

  

//重载形式  

int BTree::BTreeLeaves()  

{  

    return BTreeLeaves(root)  

}  

  

//求二叉树叶子结点个数的函数  

int BTree::BTreeLeaves(BTreeNode* r)  

{  

    //当为空时,返回0;当找到叶子时返回1  

    if(r==0) return 0   

    else  

        if(r->lChild==0&&r->rChild==0)  

            return 1  

    else  

        return BTreeLeaves(r->lChild)+BTreeLeaves(r->rChild)  

}  

  

//重载形式  

int BTree::BTreeHeight()  

{  

    return BTreeHeight(root)  

}  

  

//求二叉树高度的函数  

int BTree::BTreeHeight(BTreeNode* r)  

{  

    if(r==0) return 0  

    else  

    {  

        //二叉树的高度为左右子树的最大者+1  

        int lHei=BTreeHeight(r->lChild)  

        int rHei=BTreeHeight(r->rChild)  

        return (lHei>rHei) ? lHei+1:rHei+1  

    }  

}  

  

  

  

//层次遍历求树高需要利用的新结构  

struct LayerBTreeNode  

{  

    BTreeNode* ptr  

    int height  

}  

  

//层次遍历求高度  

int BTree::layerHeight()  

{  

    queue<LayerBTreeNode> que  

    LayerBTreeNode temp,lTemp,rTemp //牺牲空间来获得算法的清晰度  

  

    BTreeNode* r=getRoot()  

  

    int hei=1  

    temp.ptr=r  

    temp.height=1  

    que.push(temp) //先将根对应的LayerBTreeNode对象进队  

      

    //不为空时  

    while(!que.empty())  

    {  

        //BTreeNode* btreePtr=0  

  

        temp=que.front() //取出队首元素  

        que.pop()  

          

        r=temp.ptr  

  

        //用当前的高度跟取出的队首进行比较  

        if(hei<temp.height)  

                hei=temp.height  

  

        if(r->lChild!=0||r->rChild!=0)  

        {  

            //如果它的左右子树不为空,则进队列  

            if(r->lChild!=0)  

            {  

                lTemp.ptr=r->lChild  

                lTemp.height=temp.height+1 //在原来高度基础上加1,再入队列  

                que.push(lTemp)  

            }  

            if(r->rChild!=0)  

            {  

                rTemp.ptr=r->rChild  

                rTemp.height=temp.height+1  

                que.push(rTemp)  

            }  

  

        }  

    }  

    return hei  

}

日奈森亚梦(日奈森 あむ)(Hinamori Amu)Amu(亚梦).

CV:伊藤かな恵(日本);林美秀(台湾);何璐怡(香港)

初登场于第一话。故事的女主角,圣夜学园的小学生(动画故事开始的时候是5年级11岁,而漫画是四年级)是守护者中的Joker。

耳朵是她的敏感部位。粉红色中短发,特征是头上的红色十字发夹(有时是黑的、蓝的、白的、绿的、紫的)。守护甜心是小兰、美琪、小丝、方块(戴雅、阶砖)。形象改造时,就变化为红心,黑桃,梅花(三叶草),还有第四颗蛋方块(正式名字未确定,一般翻译成方块或阶砖,也有人音译为戴雅 Dia),据说一共有五个蛋。官网上有五个蛋的图片,至今还没出生,不知是否会出生。在漫画44话中,小兰、美琪、小丝的蛋消失,而方块重新诞生。担任守护者的Joker(王牌)。在动画第100话因想拯救几斗而将Humpty Lock和Dumpty key搭配,DIA正式孵化。后又与小兰、美琪、小丝和方块变身为Amulet Fortune。

年龄12岁,身高152cm,生日是9月24日, 血型是o型,星座是天秤座。

辺里唯世/边里唯世(ほとり ただせ)(Hotori Tadase)

Tadase(唯世).CV:高木礼子(日本);李明幸(台湾);张预东(香港)(幼年:郑丽丽 香港)

初登场于第一话。男主角之一。担任K‘s Chair(King国王)的少年。金黄色短发。不擅长爬树。被校园里的女生通称为『王子』。他的守护甜心是奇迹。因为小时候奶奶的话而想成为另一个坚强的自己从而诞生了奇迹。跟亚梦同岁(故事开始时5年级)。亚梦憧憬的少年。可是被称为「王子」时就会形象改造(谐音或其他语种也会),变成了自以为是「国王陛下」,说自己不是卑微的王子,目前为止唯一恢复办法是拿水桶扣在他头上数3,2,1(璃茉发明的必杀“绝技”)。他的梦想就是“征服世界”(实际上是想让自己变得更坚强勇敢起来)。不过恢复原状后就会情绪失落,感觉很丢脸。实际上唯世是一个非常害羞的人,很怕在大庭广众面前说话。因此他想变强而变成「另一个自己」。开始喜欢变成亚梦变身后的样子(11集),可是后来逐渐发现自己喜欢上了亚梦本身,可以为她与几斗战斗。

漫画于28话向亚梦告白,后就一直怕别人“抢”走亚梦,所以对一切有关亚梦的话题都很感兴趣。原名应该是辺里唯世(“辺”读作“dào”)。漫画第22话,动画第39话中,唯世因找不到胚胎而失去了自信,加上听了“Black Diamonds“的“许愿CD”,令奇迹回到蛋中,蛋逐渐被显示出X。后来得到亚梦的帮忙,跟奇迹变身为“Platinum Royal(英文理解应为白金圣皇,澄空字幕组翻译法为Platina Royale)”。可以和Amulet Heart 一起使用Platinum Heart 净化坏蛋。在74集借白色情人节第一次真心告白,恰被几斗听到。

年龄12岁,身高154cm,体重42kg。生日是3月29日,血型是B型,星座是白羊座。

月咏几斗(つきよみ イクト)(Tsukiyomi Ikuto)

Ikuto(几斗).CV:中村悠一(日本);林谷珍(台湾);李致林(香港)

初登场于第一话。男主角之一。一开始瞄准了亚梦的守护蛋。深蓝色碎发,穿着黑色衣服。变身、形象改造后都会长出超萌的猫耳和猫尾巴。当初被亚梦误以为是「COSPLAY猫耳变态男」。叫唯世「小鬼国王」。

是月咏歌呗的亲哥哥。也是「Dumpty key]持有者(其实是他父亲和唯世父亲的友情见证,漫画43话说出了,并非是他抢唯世的,而是唯世的妈妈给他的,而且唯世爸爸也同意让他带着,而并非抢走)。小提琴演奏得很好(父亲是天才小提琴家),守护甜心是阿夜。

虽然表面上是亚梦的敌人,但多次帮助亚梦。在漫画里实际上和唯世是如兄弟般的感情非常好。经常有意无意地挑逗亚梦,所以亚梦总是骂他。被唯世称为「带来不幸的黑猫」,几斗为了不让唯世亚梦等人受到伤害,时常惹他们生气,避开他们。由于复活社对小提琴动的手脚,从小提琴中诞生出一颗纯黑色的蛋并与几斗进行变身Death Label,被亚梦和唯世救了出来。喜欢亚梦(曾对亚梦告白过而被亚梦当做是开玩笑之后就不了了之)。

年龄17岁,身长179cm,体重59kg,生日是12月1日,血型是AB型,星座是射手座。

月咏歌呗/星名歌呗 (ほしな 歌呗)(Tsukiyomi Utau/Hoshina Utau)

Utau(歌呗).CV:水树奈々(日本);龙显蕙(台湾);林元春(香港)

初登场于第七话。14岁的中学生兼偶像的活跃少女。金发双马尾的哥特LOLI,穿哥特萝莉系的衣服。复活社的人,为了帮助几斗脱离复活社而不顾一切的寻找胚胎。 她的守护甜心是恶魔依琉和天使绘琉。与依琉形象改造时会长出恶魔的翅膀。 事实上是几斗的亲妹妹。有恋兄情结,跟几斗接吻过(在29集,准确点来说是强吻几斗),认为亚梦是情敌。平时略冷,爱吐槽颇有傲骄属性,但是看见几斗就会性情大变,一下子变成恋兄的傲骄形象。为了抢回月咏家的“Humpty Lock“而与日奈森为敌。因为与黑化的DIA有很大的共通点的关系,和亚梦的甜心方块变身。 专长是借由歌声取出“坏蛋”。 在第七话里,歌呗是以个人歌手的身份唱“迷宫蝴蝶”。唱歌的时候会跟依琉形象改造。当唱到最后一句歌词时,会摸一下额头,再把右手食指向上一指,把听众的心灵之蛋抽出来,变成坏蛋。在与守护者的对决中失去了绘琉、依琉和方块,才意识到守护甜心的意义。随后亚实的突然出现让她回忆年幼时身为歌迷的心情,与由佳里离开复活社。 与绘琉变身为纯洁之魅,能刹那间使大批量的X蛋未经任何痛苦便得以净化。动画93集终于举办了演唱会,并出写了新歌。

年龄15岁,身高160cm,体重48kg。生日是11月9日、血型是A型,星座天蝎座。

藤咲凪彦/藤咲抚子(藤咲 なぎひこ/藤咲 なでしこ)(Fujisaki Nagihiko/Fujisaki Nadeshiko)

Nagihiko/Nadeshiko(凪彦/抚子).CV:千叶纱子(日本);龙显蕙(台湾);曾佩仪(香港)

初登场于第一话。跟亚梦同岁(故事开始时5年级)。原担任Q‘s Chair (Queen 皇后)的人,身为男孩子,真名为藤咲凪彦,却因为家族因素以女性自居(藤咲家的男孩在小时候需以女孩的身份、姓名生活,目的是要了解女孩跳舞的步法)。深紫色长发,饰着丝带,身为抚子时是个温柔的、善解人意的女孩子。他的守护甜心是手鞠。形象改造后变成了好胜的性格。五年级后到欧洲留学。在第25话中得知抚子其实是男生。因为和亚梦接触过多被璃茉视为敌人。凪彦想尝试着改变自己,暂时停止了练习舞蹈。由于想法的改变,手鞠回到了蛋中,并有了第二颗蛋。第三学期归来时(海里走后)被空海和唯世胁迫以凪彦的身分成为新“J‘s Chair”留在圣夜学园(动画第56集),经常和璃茉吵架(动画62集)。漫画和动画的98集中璃茉在听见凪彦与冴木老师的对话后,戳破凪彦其实是抚子,第二颗蛋节奏在漫画第第八卷三十四回和手鞠都孵出,并都和凪彦变身。第二颗蛋节奏在91集也正式孵出。和节奏形象改造后脖子上会出现耳机,变成一个很爽朗、做事情不考虑的性格的人。手鞠在98集再次孵出,并于手鞠变身为「大和舞姬」。

年龄12岁,生日是7月4日,血型是AB型,星座是巨蟹座

真城璃茉/真城璃舞(真城 りま)(Mashiro Rima)

Rima(璃茉).CV:矢作纱友里(日本) ;郑丽丽(香港)

初登场于动画第二十七话。与亚梦同班。担任新Q‘s Chair的少女。浅茶色披肩金黄色卷发,跟亚梦同年纪,被弥耶称为“璃茉茉”(动画中)。她的守护甜心嘻嘻,是一个小丑,其实璃舞小时候也很喜欢搞笑,但后来因为曾差点被绑架,而父母和学校互相推卸责任,使璃舞的心理受到了打击。最终在亚梦的开导和鼓励下恢复了爱笑的性格,但对于外人还是挺冷的。身材娇小非常可爱,表面上有点冷漠,但内心是很可爱的。擅长扮哭,(这就是所谓的女王性格)因为“形象改造”后会变成搞笑的角色遭到耻笑,而讨厌“形象改造”。变身后为“Clown Drop”。对守护者都是非常的挑剔。不喜欢交朋友,是因为形象的关系,但因为亚梦的鼓励,而让她感觉到朋友的重要,目前和亚梦是朋友。其实璃舞对搞笑很执着,认为“搞笑不是游戏”,一说到搞笑就十分认真。很喜欢亚梦这个朋友,认为自己是亚梦的密友。动漫中因为亚梦和凪彦接触过多,所以把凪彦视为敌人,经常看凪彦不爽,和他吵架。动画98集,璃舞听见凪彦与冴木老师的对话,而揭穿凪彦就是抚子的事实。漫画第八卷已经和凪彦和好。

年龄12岁,生日是2月6日,血型是B型,星座是水瓶座。

结木弥耶(结木 やや)(Yuiki Yaya)

Yaya(弥耶).CV:中村知子(日本);黄珽筠(台湾);杨善谕(香港)

初登场于第一话。担任A‘s Chair(Ace)的少女。比亚梦小一岁(故事开始时4年级)。她的守护甜心是皮皮。发型为双马尾,饰上著大红丝带。非常喜好甜食,有着爱向成人撒娇的个性,并以可爱的昵称称呼同伴。但弥耶事实上十分害怕孤独寂寞.形象改造后脖子上围一根口水垫,拿着武器「巨大拨浪鼓」的婴儿模样,受到婴儿的性质影响,性格成为爱哭的人。很喜欢可爱的东西。弥耶有个弟弟叫结木翼(CV:泽城美雪)。因为弟弟出生后,受到了父母的偏爱,便成了弥耶梦想成为婴儿的一大理由。后变身成Dear Baby。弥耶与璃茉的朋友关系也不一般。其实弥耶她在关键时刻也很坚强。

年龄11岁,生日是5月25日、血型是O型,星座是双子座。跟空海有些暖味

柊立花(柊りっか )(Hiiragi Riqka)

Riqka(立花).CV:江里夏(日本)

该角色为动画原创人物,从守护甜心 派对!中登场,初登场於心跳不已第1话(动画第103话登场)。是圣夜学园的转校生,因为憧憬亚梦,所以想当实习守护者。曾为电柱下的花浇水以及为了救小猫而爬上树上。虽然,自身并没有守护甜心,但可以看到守护甜心,拥有能听见坏蛋心声的强大能力,但是亚梦他们并不知道在她的卧室里有大量的坏蛋躲著。

一之宫光(いちのみや ひかる)(Ichinomiya Hikaru)假名:御前(Gozen)

CV:中尾衣里(日本)

初登场于动画92集。复活社幕后老板。是一个金发碧眼的可爱小孩,年龄比弥耶还小。谜一样的身份,和别人说话时使用变声器,所以无法知道他的真实面目。漫画41话揭开了他成为老板的原因。在复活社中只有星名专务知道他的真实身份。是星名专务的孙子。自幼接受星名专务的严格教育,目的是为了让他成为老板(因为光的父母在他小的时候就因出车祸而去世,星名专务与星名奏子结婚,是为了能让其自己的后代成为复活社的领导,掌管复活社,剥夺了歌呗以及几斗继承复活社的权利。)。与其关系生硬,其后由亚梦化解。在动画中92集和亚梦初次相遇时,亚梦曾请他吃鲷鱼烧。后来他再遇见亚梦时,跟她说经他调查后,发现鲷鱼烧含太多糖份,明白零食是废物。心灵之蛋的绘本其中的一页就是由他撕下来的,动画中一直出现的那颗雪白发光的蛋(守护者认为的胚胎),其实是光的心灵之蛋。最后回到了光的心中,后来进入圣夜学园当一年级小学生,成为见习守护者。

相马空海(相马 空海)(Souma Kukai)

CV:阿部敦(日本);何志威(台湾);曹启谦(香港)/幼年:田中晶子(日本)

初登场于第一话。原担任J‘s Chair(Jack 侍从)的少年,茶褐色乱发。比亚梦大一岁(故事开始时6年级)。他的守护甜心是大地。形象改造时头上出现一颗五角星。

很喜欢摸别人的头,足球部的主将,常因为不知道要参加哪个社团而烦恼,运动神经相当好,又阳光、帅气,很受女生的欢迎。体力很强,老带着亚梦进行“跑跑大冲刺”,亚梦对他很有哥哥的感觉。小学部毕业后去了中学部。由于动画中的第29话在亚梦和绘琉一起变身的时候,他和大地受到“Humpty Lock”的影响也一起变身,变身“Sky Jack ”。有四位哥哥。简单说他是其中最酷的男生。

年龄13岁,生日是8月17日,血型是A型,星座是狮子座。

三条海里(三条 海里)(Sanjou Kairi)

CV:斋贺弥月(日本); 龙显蕙(台湾); 雷碧娜(香港)

初登场于动画第二十七话。比亚梦小两岁、4年级时转入月班。担任新J‘s Chair的少年。绿色短发,登场时是四年生,比守护者中的谁都小,却比谁都高,所以因为身高的问题常常被当成大人,被亚梦和弥耶称为“班长”,守护甜心是武藏。戴眼镜,如外表般是头脑派。是复活社三条由佳里的弟弟。最初成为守护者是为了找出守护者的秘密。常常因为接受到姐姐的任务而左右为难。喜欢亚梦(参看动画第44话)。漫画26话(动画第41话向亚梦透露好感)向亚梦表白。动画是在44集因复活社计划失败决定回转回故乡的学校完成学业,并在临走前当众向亚梦告白。后于71话再次出现,并明白亚梦并不讨厌自己。变身为Samurai Soul。在漫画第44话回来(好像是三条由佳里又要他帮忙),在动画102话出现了同样的状况,这也许寓意着海里将要回来。

年龄10岁,生日是6月12日,血型是A型,星座是双子座。

小兰(ラン)(Ran)

(CV:阿澄佳奈)

初登场于第一话。最初由亚梦的蛋出生的守护甜心,活泼。

戴粉色太阳帽,穿粉红系的竞技啦啦队风格的衣服,红心头饰。

擅长运动,坦率的性格。讨厌安静

和亚梦变身为「Amulet Heart」,必杀技的武器是「Heart Rod」,必杀技是「Spiral Heart」。

美琪 (ミキ)(Miki)

(CV:加藤奈々絵) 张颂欣 香港

登场于第2话。有艺术家气息的守护甜心。

穿着前卫短裤,帽子上有黑桃头饰,总是戴着淡蓝色的包包,全身色调以蓝为主。初见看上去像男孩子,恋慕奇迹与阿夜与大地还有节奏。

擅长绘画,喜欢艺术,很酷。讨厌被束缚。没有明显语癖。

和亚梦变身后为「Amulet Spade」,必杀技是「Colorful Canvas」、「Colorful Canvas Special」和「Prism Music」。

小丝(スゥ)(Su)

(CV:丰崎爱生)

初登场于第三话。以糕点为首家务全擅长,亚梦的守护甜心。

薄绿的三角巾,穿绿系女佣服,梅花头饰。

天然呆。讨厌毛虫。喜欢做美食。

善良,很有爱心,变身后可把东西恢复原样。

和亚梦变身后就会变成为「Amulet Clover」,必杀技是「Remake Honey」和「Sweet Applique」。

注:小兰/美琪/小丝跟亚梦净化坏蛋的是「Open Heart!」

方块(Dia)

(CV:伊藤かな恵)

初登场于第27话。拥有音乐气质的甜心,嘴角有麦克风。

因为空海毕业、抚子留学、别人认为亚梦不再像自己等原因,亚梦十分自卑,于是变成坏蛋,并离开亚梦,孵出坏甜心,头上的装饰有"X"的记号。

被收集坏蛋中的歌呗发现,认为歌呗是主人,跟随著歌呗,一起收集坏蛋。

Black dia和歌呗变身成「Dark Jewel」,必杀技是「Shining Black」和「Glitter Particle」。

在第43话,"X"记号因为亚梦的话而除下,并且头上的方块装饰变成了两个,和亚梦变身为「Amulet Dia」,必杀技是「Starlight Navigation」。

Dia似乎有读心术一样的能力,口头禅是「光辉」(かがやき)。

于第二季100话正式孵化,后因「Humpty Lock」和「Dumpty key]产生共鸣与其他三只甜心共同变身。

在第102集和小兰、美琪、小丝一起的Open Heart。

阿夜(ヨル)(Yoru)

(CV:泽城美雪)

初登场于第1话。几斗的守护甜心。

有猫耳和尾巴,穿肉垫手套和猫脚长筒皮靴。十字架、拘束皮带附著的裤子和的庞克风格的衣服。

爱自由的野猫造型。难对付狗。

与几斗变身成「Black Lynx」

奇迹(キセキ)(Kiseki)

(CV -三宅华也)

初登场于第1话。唯世的守护甜心。样子和唯世相似。患有花粉症。闯进复活社时被阿夜救过。

戴王冠,穿斗篷,灯笼裤。

性格蛮横娇羞。认为所有人都是他的臣民。

与唯世变身成「Platinum Royal」。

手鞠(てまり)(Temari)

(CV - 柚木凉香)

初登场于第2话。抚子的守护甜心。

马尾辫发型。穿紫粉色和服,樱花头饰。

非常有淑女气质。但发起飙来很可怕

之前因为凪彦的迷茫而回到蛋里

在第98话重新诞生,并和凪彦变身为「Yamato Maihime」(大和舞姬),还和嘻嘻璃茉一起净化坏蛋(皇后华尔兹)。

节奏(リズム)(Rizumu)

(CV-宫田幸季)

初登场于第91话。凪彦的守护甜心。

长发发型。穿嘻哈风格的夹克与跨裤,戴浅色针织帽,善于体育(特别是篮球)。

在第91话孵出并与凪彦变身「Beat Jumper」。

大地(ダイチ)(Daichi)

(CV - 吉野裕行)

初登场于第2话。空海的守护甜心。

穿T恤、星型头饰。擅长运动

与空海变身成「Sky Jack」。

皮皮(ぺぺ)(Pepe)

(CV - 古山贵实子)

初登场于第2话。弥耶的守护甜心。婴儿的造型。发型与弥耶是同样的双马尾。与弥耶变身成「Dear Baby」

嘻嘻(クスクス)(Kusukusu)

(CV:成田纱矢香)

初登场于第15话。璃茉的守护甜心。

右眼下有星星记号,左眼下是水滴记号、有小丑的身躯。

与璃茉变身成「Clown drop」,必杀技是「Juggling Party」和「Tightrope Dancer」。

武藏(ムサシ)(Musasi)

(CV:冈本信彦)

初登场于第28话。海里的守护甜心。

从前的武士的形态。身躯、脸、发型和海里一模一样。戴眼镜。

与海里变身成「Samurai Soul」

依琉(イル)(Iru)

(CV:今野宏美)

初登场于漫画第十一话。歌呗的守护甜心。

穿恶魔衣服。

与歌呗的变身为「Lunatic Charm」。必杀技为「Nightmare Lorelei」和「リリン Trident」。

在第42话,与亚梦变身成「Amulet Devil」,必杀技是「Devil's Tune」。

绘琉(エル)(Eru)

(CV:氷青)

初登场于第28话。歌呗的守护甜心。

总是眯着眼。

外表是天使的模样。拥有可以自己的意志与持有者(或持有者以外甜心拥有者)进行变身的能力。

在第29话与亚梦变身成「Amulet Angel」。必杀技为「White Flag」(举白旗)和「White Flag W Plan」。在第33话和亚梦变身的另一技能「Angel Wink」

第35话中,与亚梦变身又有一技能「爱的修复光线」。

第43话与歌呗变身为「Seraphic Charm」,必杀技为「Angel Cradle」

雪贝(Snow-Pe)

拥有很强能量的守护甜心。初登场于14话。是鸟居美冬的守护甜心。 (暂不能变身)