层序创建二叉树
创建过程:#
(1) 输入第一个数据:
若为0,表示此树为空,将空指针赋给根指针,树构造完毕;
若不为0,动态分配一个节点单元,并存入数据,同时将该节点地址放入队列。
(2) 若节点不为空,从队列中取出一个节点地址,并建立该节点的左右孩子:
从输入序列中读入下一数据;
若读入的数据为0,将出队节点的左孩子指针置空;否则,分配一个新的节点单元,存入所读值,并将其置为出队节点的左孩子,同时将此孩子地址入队;
接着再从输入序列中读入下一个数据;
若读入的数据为0,将出队节点的右孩子指针置空;否则,分配一个新的节点单元,存入所读值,并将其置为出队节点的右孩子,同时将此孩子地址入队;
(3) 重复第(2)步过程,直到队列为空,再无节点出队,构造过程到此结束。
typedef int ElementType; #define NoInfo 0 //用0表示没有节点 //层序创建二叉树 BinTree CreateBinTree() { ElementType Data; BinTree BT, T; queue<TNode *> Q; //创建第1个节点,即根节点 cin >> Data; if(Data != NoInfo) { //分配节点单元,并将节点地址入队 BT = (BinTree)malloc(sizeof(struct TNode)); BT->Data = Data; BT->Left = BT->Right = NULL; Q.push(BT); } else return NULL; //若第一个数据就是0,返回空树 while(!Q.empty()) { T = Q.front(); //从队列中取出一节点地址 Q.pop(); cin >> Data; //读入T的左孩子 if(Data == NoInfo) T->Left = NULL; else { //分配新节点,作为出队节点的左孩子,并将该新节点入队 T->Left = (BinTree)malloc(sizeof(struct TNode)); T->Left->Data = Data; T->Left->Left = T->Left->Right = NULL; Q.push(T->Left); } cin >> Data; //读入T的右孩子 if(Data == NoInfo) T->Right = NULL; else { //分配新节点,作为出队节点的右孩子,并将该新节点入队 T->Right = (BinTree)malloc(sizeof(struct TNode)); T->Right->Data = Data; T->Right->Left = T->Right->Right = NULL; Q.push(T->Right); } } //结束while return BT; //返回二叉树的根节点 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南