当前位置: 首页 > news >正文

二叉树,先序遍历、中序遍历、后序遍历和层序遍历实现 C++

二叉树基类声明

template<typename T>class Tree{protected:Tree() = default;virtual ~Tree() = default;virtual const Tree& root()const = 0;virtual Tree& root() = 0;virtual const Tree& left()const = 0;virtual const Tree& right()const = 0;virtual Tree& left() = 0 ;virtual Tree& right() = 0;virtual const T& data()const = 0;virtual T& data() = 0;virtual bool valid()const { return false };};

遍历算法

template<typename T, typename Fun>void preorderTraversal(const Tree<T>& node, Fun fun){if (!node.valid())return;if (fun(node.data()))return;preorderTraversal(node.left(), fun);preorderTraversal(node.right(), fun);}template<typename T, typename Fun>void inorderTraversal(const Tree<T>& node, Fun fun){if (!node.valid())return;inorderTraversal(node.left(), fun);if (fun(node.data()))return;inorderTraversal(node.right(), fun);}template<typename T, typename Fun>void postorderTraversal(const Tree<T>& node, Fun fun){if (!node.valid())return;postorderTraversal(node.left(), fun);postorderTraversal(node.right(), fun);if (fun(node.data()))return;}template<typename T, typename Fun>void levelTraversal(const Tree<T>& root, Fun fun){SQueue<Tree<T>*> queue;queue.enqueue(&root);while (!queue.isEmpty()){Tree<T>* node = queue.dequeue();if(!node->valid())continue;if (fun(node->data()))return;if(node->left().valid())queue.enqueue(&node->left());if (node->right().valid())queue.enqueue(&node->right());}}

为学习数据结构编写,容器可能存在问题。有建议可以留言指出,谢谢。

GitHub

相关文章:

  • 【quarkus系列】解决native包反射问题之RegisterForReflection 注解
  • 【八股系列】谈谈关于对webpack热更新的原理?
  • Golang | Leetcode Golang题解之第114题二叉树展开为链表
  • 装机必备——360压缩安装教程
  • Kubernetes集群上的Etcd备份和恢复
  • 汇编原理()二进制 跳转指令
  • 蒲公英旁路组网:总部旁路,分部一级组网方案
  • 安卓六种页面加载优化方案对比总结
  • Linux安装PostgreSQL脚本
  • 装饰模式:鸡腿堡
  • 提高联盟营销收入的秘密武器
  • Nginx实战:https 配置SSL证书
  • 弱密码系统登录之后强制修改密码
  • Codeforces Round 916 (Div. 3) C. Quests (贪心 + 模拟)
  • 鸿蒙开发接口图形图像:【@ohos.display (屏幕属性)】
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • ES6之路之模块详解
  • gcc介绍及安装
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaWeb(学习笔记二)
  • js递归,无限分级树形折叠菜单
  • js对象的深浅拷贝
  • python docx文档转html页面
  • React Transition Group -- Transition 组件
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 测试开发系类之接口自动化测试
  • 回顾2016
  • 利用DataURL技术在网页上显示图片
  • 每天10道Java面试题,跟我走,offer有!
  • 排序算法学习笔记
  • 删除表内多余的重复数据
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 我们雇佣了一只大猴子...
  • #{} 和 ${}区别
  • #includecmath
  • #Linux(Source Insight安装及工程建立)
  • (+4)2.2UML建模图
  • (11)MATLAB PCA+SVM 人脸识别
  • (MATLAB)第五章-矩阵运算
  • (八)c52学习之旅-中断实验
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (计算机网络)物理层
  • (三)终结任务
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (算法)区间调度问题
  • (已解决)vscode如何选择python解释器
  • (转)德国人的记事本
  • .axf 转化 .bin文件 的方法
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .NET MVC第三章、三种传值方式
  • .Net Redis的秒杀Dome和异步执行
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...