问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

跪求各位,帮忙给这段二叉树层次遍历算法加上注释,尽量多一点详细一点。谢谢啦!!!(就是语句后//)

发布网友 发布时间:2022-04-23 03:40

我来回答

1个回答

热心网友 时间:2023-10-13 15:12

#include<iostream>

using namespace std;


struct bnode  // 二叉树节点

{

char data;

bnode *lchild, *rchild;

};


struct node{  // 链式队列节点

bnode *date;

node *next;

};


// queue--------------------------------------------------------------

class queue  // 层次遍历(广度优先遍历)需要用队列来保存访问过的节点

{

public:

queue();

bool empty()const;  // 判断队列是否为空

bool append(bnode *&x);  // 在对尾添加节点

bool getfront(bnode *&x)const;  // 获得队首节点

bool serve();  // 删除队首节点


private:

node *front, *rear;  // 队列首尾指针

};


queue::queue()

{

// 构造带头节点的链式队列

front=new node;

rear=front;

front->next=NULL;

}


bool queue::empty()const

{

if(front==rear) 

return 1;

else 

return 0;

}


bool queue::append(bnode *&x)

{

node *s=new node;

s->date=x;

s->next=NULL;

rear->next=s;

rear=s;

return 1;

}


bool queue::getfront(bnode *&x)const

{

if(empty()) 

return 0;

else{

x=front->next->date;  // font指向头节点,其下一个节点才是真正的队首节点

return 1;

}

}


bool queue::serve()

{

if(empty()) 

return 0;

else{

node *u;

u=front->next;

front->next=u->next;

delete u;

if(front->next==NULL) 

rear=front;

return 1;

}

}


// bitree-----------------------------------------------------

class bitree

{

public:

bitree();

bnode *get_root() { return root; }  // 获取根节点

void create(){ create(root); }  // 构造节点


private:

bnode *root;

void create(bnode *&T);

};


bitree::bitree()

{

root=NULL;

}


void bitree::create(bnode *&T)

{

char n;

cin>>n;

if(n=='.')  // 输入'.'时停止构造该节点

T=NULL;

else{

T=new bnode;

T->data=n;

create(T->lchild);

create(T->rchild);

}

}


// test---------------------------------------------

queue tr;


int main()

{

bitree a;

a.create();

bnode *t=a.get_root();

tr.append(t);  // 二叉树根节点入队

cout<<t->data<<endl;

while(!tr.empty())

{

bnode *p;

// 取出队首节点,依次访问它的左右子节点

tr.getfront(p);

tr.serve();

if(p->lchild!=NULL)

{

cout<<p->lchild->data<<endl;

tr.append(p->lchild);

}

if(p->rchild!=NULL)

{

cout<<p->rchild->data<<endl;

tr.append(p->rchild);

}

}

return 0;

}


对于叶节点,它的左右子树为空,所以需要用'.'来表示

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 1&gt;构造一个链表,每个结点存储的是整型数据。 如:(2,4,6,8,10,12,14,16,18,20) &lt;2 求一段关于 justin bieber 《next to you》的英文介绍,中文也要。100字左右。 寻一份《数据结构》试题及答案 1.next.2.see.3.time.4you怎么排列 数据结构(C语言).求帮忙解决错误 数据结构的两链表找公共元素 vb问题,求代码 next需要浊化吗 刚在日本开始一个人住,然后就收到NTT送来的u-next料金缴纳单。完全不知道有没申请过这东西,而 meajyu的《next to U》 歌词 数据结构模式匹配求next值 Free pascal 中指针类型。 约瑟夫环(c语言) 如何在EXCEL每页下角设定第几页 下次再见,英语怎么说? U1=(User *)malloc(sizeof(User)); if(U1!=NULL) 浓汤老豆腐的家常做法大全怎么做好吃 excel怎么让表头每页都有 家常老豆腐怎么炖好吃 怎样让excel的表格打印的时候表下方的说明每页都有? 单链表中p-&gt;next= p -&gt;next -&gt;next 为什么不能运行。。 小时候不注意保护牙齿导致牙齿很黄怎么办 小时候不刷牙牙齿黄怎么美白牙齿 【真诚求助】小时候不爱刷牙,几乎不刷,现在牙很黄,该怎么样变白呢? 由于小时候不经常刷牙,牙齿变黄,怎么办? 怎么办?我小时候不爱刷牙,牙齿黄。我小时候不爱刷牙,牙齿黄。? 牙齿黄,是小时候不刷牙引起的,现在不知道怎么解决。让它变白。 小时候长期不刷牙造成的牙齿黄,怎么解决 小时候不刷牙 牙齿发黄 求有效美白办法! 我小时候,不爱刷牙现在牙特别的黄,怎么能快速的让牙变白?(不伤害牙齿) 异性交往时,怎样做才能让你爱的人也爱上你? 怎样做才能让你爱的人,也爱上你? 《你爱的人也爱上你》经典语录 裙带菜是一种野菜吗?它都有哪些吃法? “来日方长何惧路遥马慢”,如何让你爱的人也爱上你? 如何让你爱的人爱上你? 裙带菜是海鲜吗? 想让你爱的人也爱上你,该怎么做? 裙带菜是发物吗? 如何让一个你爱的人也爱上你