
二叉树的基本操作
发布日期:2021-05-07 17:58:52
浏览次数:19
分类:精选文章
本文共 4051 字,大约阅读时间需要 13 分钟。
问题分析
设计二叉树类,能够对二叉树进行先序、中序、后序和层序遍历,遍历的操作为输出结点的值。主函数输入一棵二叉树,按先序、中序、后序、层序的遍历顺序输出结点的值。
代码
二叉树遍历 问题描述
设计二叉树类,能够对二叉树进行先序、中序、后序和层序遍历,遍历的操作为输出结点的值。主函数输入一棵二叉树,按先序、中序、后序、层序的遍历顺序输出结点的值。二叉树的结点数不超过20。
输入数据只有一组,二叉树的结点均为一个数字,数据为0代表当前结点为空。输入结点的值按照二叉树的先序遍历顺序,例如输入:1 2 4 0 0 5 0 0 3 0 6 0 00表示空,输入的数字之间由空格分隔。上述输入对应的二叉树如下图所示:输出描述
输出先序、中序、后序和层序遍历二叉树得到的序列,各占一行,同一行的数字之间由空格分隔。
输入样例:1 2 4 0 0 5 0 0 3 0 6 0 0输出样例:1 2 4 5 3 6 4 2 5 1 3 6 4 5 2 6 3 1 1 2 3 4 5 6代码
#includeusing namespace std; struct BiNode { int data; BiNode *lchild, *rchild; }; class BiTree { public: BiTree() { root = Creat(); } ~BiTree() { Release(root); } void PreOrder() { PreOrder(root); } void InOrder() { InOrder(root); } void PostOrder() { PostOrder(root); } void LevelOrder() { LevelOrder(root); } private: BiNode *Creat(); void Release(BiNode *bt); void PreOrder(BiNode *bt) { if (bt != NULL) { cout << bt->data << " "; PreOrder(bt->lchild); PreOrder(bt->rchild); } } void InOrder(BiNode *bt) { if (bt != NULL) { InOrder(bt->lchild); cout << bt->data << " "; InOrder(bt->rchild); } } void PostOrder(BiNode *bt) { if (bt != NULL) { PostOrder(bt->lchild); PostOrder(bt->rchild); cout << bt->data << " "; } } void LevelOrder(BiNode *bt) { if (bt == NULL) { return; } queue q; q.push(bt->data); while (!q.empty()) { int current = q.front(); q.pop(); if (current == 0) { continue; } cout << current << " "; int left = current * 2 - 1; if (left >= 1 && left <= 20) { q.push(left); } int right = current * 2; if (right >= 1 && right <= 20) { q.push(right); } } } BiNode *root; }; BiNode *BiTree::Creat() { BiNode *bt; int ch; cin >> ch; if (ch == 0) { bt = NULL; } else { bt = new BiNode; bt->data = ch; bt->lchild = Creat(); bt->rchild = Creat(); } return bt; } void BiTree::Release(BiNode *bt) { if (bt == NULL) { return; } else { Release(bt->lchild); Release(bt->rchild); delete bt; } } int main() { BiTree B; B.PreOrder(); cout << endl; B.InOrder(); cout << endl; B.PostOrder(); cout << endl; B.LevelOrder(); return 0; }
输出结果
先序遍历输出:
1 2 4 5 3 6
中序遍历输出:
4 2 5 1 3 6
后序遍历输出:
4 5 2 6 3 1
层序遍历输出:
1 2 3 4 5 6
发表评论
最新留言
很好
[***.229.124.182]2025年03月26日 23时44分46秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
phthon基本语法——温习
2019-03-05
sleep、wait、yield、join——简介
2019-03-05
web项目配置
2019-03-05
c语言(基本数据类型)实参与形参传值 用汇编理解
2019-03-05
基于单片机可控音乐流水灯控制设计-全套资料
2019-03-05
基于单片机简易信号误差分析设计-全套资料
2019-03-05
基于单片机简易脉搏测量仪系统设计-毕设课设资料
2019-03-05
VHDL代码风格
2019-03-05
Javascript中String支持使用正则表达式的四种方法
2019-03-05
【IoT】蓝牙BLE基础:CC254x通信系列之模拟SPI协议
2019-03-05
【IoT】TI BLE CC2541 串口控制蓝牙详解
2019-03-05
【Tool】如何使用 Uniflash 烧写 WIFI 芯片 CC3200
2019-03-05
copy_{to, from}_user()的思考
2019-03-05
纯客户端页面关键字搜索高亮jQuery插件
2019-03-05
linux运维中常用的命令
2019-03-05
Java温故而知新-反射机制
2019-03-05
eclipse引用sun.misc开头的类
2019-03-05
C++
2019-03-05
关于EFI系统分区(ESP)你应该知道的3件事
2019-03-05
5.Mybatis复杂映射开发
2019-03-05