二叉树MFC实现
设有一颗二叉树如下;

这似乎是一颗经常用作示例的二叉树;
对树进行遍历的结果是,
先序为:3、2、2、3、8、6、5、4,
中序为:2、2、3、3、4、5、6、8,
后序为2、3、2、4、5、6、8、3;
下面VC6看一下;单文档工程;
全部的视类CPP代码;
// btreeView.cpp : implementation of the CBtreeView class
//#include "stdafx.h"
#include "btree.h"#include "btreeDoc.h"
#include "btreeView.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endifstruct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;
};void PreOrderTree(struct TreeNode*, CDC*, int);
void InOrderTree(struct TreeNode*, CDC*, int);
void PostOrderTree(struct TreeNode*, CDC*, int);
int maxDepth(struct TreeNode* );int col = 0;/
// CBtreeViewIMPLEMENT_DYNCREATE(CBtreeView, CView)BEGIN_MESSAGE_MAP(CBtreeView, CView)//{{AFX_MSG_MAP(CBtreeView)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()/
// CBtreeView construction/destructionCBtreeView::CBtreeView()
{// TODO: add construction code here}CBtreeView::~CBtreeView()
{
}BOOL CBtreeView::PreCreateWindow(CREATESTRUCT& cs)
{// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT csreturn CView::PreCreateWindow(cs);
}/
// CBtreeView drawingvoid CBtreeView::OnDraw(CDC* pDC)
{CBtreeDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1;struct TreeNode nodea = { 3, NULL, NULL };struct TreeNode nodeb = { 2, NULL, NULL };struct TreeNode nodec = { 2, NULL, NULL };struct TreeNode noded = { 3, NULL, NULL };struct TreeNode nodee = { 8, NULL, NULL };struct TreeNode nodef = { 6, NULL, NULL };struct TreeNode nodeg = { 5, NULL, NULL };struct TreeNode nodeh = { 4, NULL, NULL };nodea.left = &nodeb;nodea.right = &nodee;nodeb.left = &nodec;nodeb.right = &noded;nodee.left = &nodef;nodef.left = &nodeg;nodeg.left = &nodeh;pDC->TextOut(20,30,"先序:");PreOrderTree(&nodea, pDC, 50);col=0;pDC->TextOut(20,80,"中序:");InOrderTree(&nodea, pDC, 100);col=0;pDC->TextOut(20,130,"后序:");PostOrderTree(&nodea, pDC, 150);int dp = maxDepth(&nodea);str1.Format("树的深度:%d", dp);pDC->TextOut(20,180,str1);
}/
// CBtreeView printingBOOL CBtreeView::OnPreparePrinting(CPrintInfo* pInfo)
{// default preparationreturn DoPreparePrinting(pInfo);
}void CBtreeView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{// TODO: add extra initialization before printing
}void CBtreeView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{// TODO: add cleanup after printing
}/
// CBtreeView diagnostics#ifdef _DEBUG
void CBtreeView::AssertValid() const
{CView::AssertValid();
}void CBtreeView::Dump(CDumpContext& dc) const
{CView::Dump(dc);
}CBtreeDoc* CBtreeView::GetDocument() // non-debug version is inline
{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBtreeDoc)));return (CBtreeDoc*)m_pDocument;
}
#endif //_DEBUG/
// CBtreeView message handlersvoid PreOrderTree(struct TreeNode* root, CDC* pDC, int rows) {CString str1;if (root == NULL) {return;}str1.Format("%d", root->val);pDC->TextOut(50+col*30, rows, str1);col=col+1;PreOrderTree(root->left,pDC,rows);PreOrderTree(root->right,pDC,rows);
}void InOrderTree(struct TreeNode* root, CDC* pDC, int rows) {CString str1;if (root == NULL) {return;}InOrderTree(root->left, pDC, rows);str1.Format("%d", root->val);pDC->TextOut(50+col*30, rows, str1);col=col+1;InOrderTree(root->right, pDC, rows);
}void PostOrderTree(struct TreeNode* root, CDC* pDC, int rows) {CString str1;if (root == NULL) {return;}PostOrderTree(root->left, pDC, rows);PostOrderTree(root->right, pDC, rows);str1.Format("%d", root->val);pDC->TextOut(50+col*30, rows, str1);col=col+1;
}int maxDepth(struct TreeNode* root) {if (root == NULL) {return 0;}else {int maxLeft = maxDepth(root->left), maxRight = maxDepth(root->right);if (maxLeft > maxRight) {return 1 + maxLeft;}else {return 1 + maxRight;}}
}
struct TreeNode {...},这是树的节点,节点中存储一个整数;
void PreOrderTree(struct TreeNode*, CDC*, int); 先序遍历函数;
void InOrderTree(struct TreeNode*, CDC*, int);中序遍历函数;
void PostOrderTree(struct TreeNode*, CDC*, int);后序遍历函数;后2个参数是控制输出的;
int maxDepth(struct TreeNode* ); 求深度;
int col = 0; 控制输出的变量;
一般控制台程序是按树输入节点来创建树;窗口的暂时不太好一行行输入节点,在代码中创建节点和节点关系;
运行如下;
相关文章:
二叉树MFC实现
设有一颗二叉树如下; 这似乎是一颗经常用作示例的二叉树; 对树进行遍历的结果是, 先序为:3、2、2、3、8、6、5、4, 中序为:2、2、3、3、4、5、6、8, 后序为2、3、2、4、5、6、8、3;…...
Nginx之客户并发数限制解读
目录 基本介绍 配置指令 limit_conn_zone limit_conn 其他 limit_rate limit_rate_after limit_req_zone limit_req 基本介绍 在我们进行系统开发设计中,要考虑服务器流量异常,负载过大等问题。对于大流量恶意的攻击访问,会带来带宽…...
白捡一个存储型XSS
本文由掌控安全学院 - 杳若 投稿 起因 利用fofa搜索时发现 org"China Education and Research Network Center" && body"/register" 任意用户注册 在找到该CMS的时候发现存在任意用户注册的情况 http://xxxx.edu.cn/student/Register.ashx …...
SpringMVC 学习(五)转发,重定向和传参
6. 转发和重定向 Spring MVC 的底层是 servlet,因此在 Spring MVC 中也存在转发和重定向的概念。 对于转发而言,其目的页面可以在 WEB-INF 目录下。重定向的目的页面不允许在 WEB-INF 目录下,因为重定向相当于用户再次发起一次请求…...
selenium不定位元素直接使用键盘操作(如弹框操作)
今天在使用selenium进行定位时,发现直接定位不了chrome的弹框,如这种弹框: 使用的是下面这行代码 driver.switch_to.alert.accept() 运行报错,说是没有 alert windown。。。。 啊?难道chrome的弹框不是用alert写的&…...
Inno Setup安装中文语言
以版本6.2.2为例: 默认安装的Inno Setup是不支持中文语言的,需要我们自行下载安装。 一、打开官网Inno Setup Translations (jrsoftware.org) 下载的文件如下 二、然后重命名放到Inno Setup的如下安装目录中 三、然后重启Inno Setup即可。 打包后的…...
【数据库——MySQL】(10)视图和索引
目录 1. 视图1.1 创建视图1.2 查询视图 2. 索引2.1 索引的分类2.2 索引的建立 参考书籍 1. 视图 1.1 创建视图 基础语法: CREATE [OR REPLACE] VIEW 视图名[(列名表)]ASSELECT语句[WITH CHECK OPTION]说明: 在默认情况下,将在当前数据库创…...
No servers available for service: renren…。 Gateway 网关报503错误 ,已解决
目录 环境配置问题描述loadbalancer的作用 环境配置 问题描述 配置spring cloud gateway使用端口访问就可以,使用lb:// 就报503 gateway:routes:- id: admin_routeuri: lb://gulimall-admin # uri: http://localhost:8080predicates:- Path/api/**filter…...
【Spring Cloud】深入理解 Eureka 注册中心的原理、服务的注册与发现
文章目录 前言一、微服务调用出现的问题1.1 服务消费者如何获取服务提供者的地址信息?1.2 如果有多个服务提供者,消费者该如何选择?1.3 消费者如何得知服务提供者的健康状态? 二、什么是 Eureka2.1 Eureka 的核心概念2.2 Eureka 的…...
添加路径到头文件默认搜索路径
在linux环境下写代码,出现函数是从其他文件引用的,需要把该文件的搜索路径添加到当前文件。 注意,除非必要,一般不建议这样做。比较好的方式是写入到CMakeLists或者Makefile中。 一次性生效,命令行输入即可ÿ…...
掌动智能:替代JMeter的压力测试工具有哪些
JMeter是一个广泛使用的开源压力测试工具,但在实际应用中,也有一些其他优秀的替代品可供选择。本文将介绍几个可替代JMeter的压力测试工具,它们在功能、性能和易用性方面都具有独特优势,可以满足不同压力测试需求的选择。 一、Gat…...
Casper Network 构建企业级区块链生态的野望
Casper Network 是基于 Layer1 且图灵完备 Wasm 的智能合约平台,它由唯一可操作的 CBC-Casper Proof-of-Stake (PoS) 共识算法(称为 Highway)支持,该网络是一个无需许可、去中心化的公共区块链。 Casper Network 主网在 2021 年 4…...
TiDB 7.1.0 LTS 特性解读丨关于资源管控 (Resource Control) 应该知道的 6 件事
TiDB 7.1.0 LTS 在前段时间发布,相信很多同学都已经抢先使用了起来,甚至都已然经过一系列验证推向了生产环境。面对 TiDB 7.1 若干重要特性,新 GA 的资源管控 (Resource Control) 是必须要充分理解、测试的一个重量级特性。对于常年奋斗在一线…...
Django Web开发入门基础
官方有很详细的文档,但是看过几遍之后如果要翻找还是有点麻烦,本文算作是学习笔记,提取一些关键点记录下来,另附上官方教程 编写你的第一个 Django 应用 注: 文中的指令使用py,是在Windows上,ma…...
Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C#)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C#) Baumer工业相机Baumer工业相机的图像剪切(ROI)功能的技术背景CameraExplorer如何使用图像剪切(ROI)功…...
LetCode算法题---第2天
注:大佬解答来自LetCode官方题解 80.删除有序数组的重复项Ⅱ 1.题目 2.个人解答 var removeDuplicates function (nums) {let res [];for (let index 0; index < nums.length; index) {let num 0;if (res.includes(nums[index])) {for (let i 0; i < res.length; …...
Leetcode.2571 将整数减少到零需要的最少操作数
题目链接 Leetcode.2571 将整数减少到零需要的最少操作数 rating : 1649 题目描述 给你一个正整数 n n n ,你可以执行下述操作 任意 次: n n n 加上或减去 2 2 2 的某个 幂 返回使 n n n 等于 0 0 0 需要执行的 最少 操作数。 如果 x 2 i x 2^…...
微前端无界 项目使用记录
1预期目标和场景 一个vue框架开发的应用,需要使用另一个系统的页面。 通俗来说,就是在一个web应用中独立的运行另一个web应用 2 技术支持 微前端处理方案:无界 无界官网: https://wujie-micro.github.io/doc/guide/ CSDN 参考…...
CDH 6.3.2升级Flink到1.17.1版本
CDH:6.3.2 原来的Flink:1.12 要升级的Flink:1.17.1 操作系统:CentOS Linux 7 一、Flink1.17编译 build.sh文件: #!/bin/bash set -x set -e set -vFLINK_URLsed /^FLINK_URL/!d;s/.*// flink-parcel.properties FLI…...
基于谷歌Transeformer构建人工智能问答系统
目录 1 项目背景 2 关键技术 2.1 Transeformer模型 2.2 Milvus向量数据库 3 系统代码实现 3.1 运行环境构建 3.2 数据集介绍 3.3 预训练模型下载 3.4 代码实现 3.4.1 创建向量表和索引 3.4.2 构建向量编码模型 3.4.3 数据向量化与加载 3.4.4 构建检索web 3.5 运行结…...
资源监控告警:OpenClaw+Qwen3-32B镜像守护个人服务器
资源监控告警:OpenClawQwen3-32B镜像守护个人服务器 1. 为什么需要智能化的个人服务器监控? 去年我的个人服务器连续宕机三次——第一次因为内存泄漏导致OOM崩溃,第二次被挖矿程序占用全部CPU资源,第三次则是磁盘写满后无人察觉…...
Redis监听Key过期事件报错?教你两种绕过CONFIG命令的实用方案
Redis监听Key过期事件的两种安全实践方案 Redis的Key过期事件监听是许多业务场景中的核心需求,比如订单超时处理、会话管理、缓存刷新等。但在云服务环境中,开发者常会遇到ERR unknown command CONFIG的报错,这通常是因为云服务提供商出于安全…...
如何高效迁移至WeFriends:微信好友关系管理工具全新升级指南
如何高效迁移至WeFriends:微信好友关系管理工具全新升级指南 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFrien…...
别再让AI芯片‘睡大觉’了:手把手教你用华为昇腾+CANN搞定异构算力调度
华为昇腾CANN实战:破解AI芯片利用率困局的5个关键策略 推开实验室玻璃门,迎面是十几台Atlas 800服务器闪烁的指示灯,而工程师小王正对着监控大屏上30%的平均利用率皱眉——这场景在采用国产AI芯片的团队中太常见了。当我们谈论异构算力调度时…...
OpenClaw语音交互方案:Qwen3-32B镜像对接Whisper实时转写
OpenClaw语音交互方案:Qwen3-32B镜像对接Whisper实时转写 1. 为什么需要语音交互方案 作为一个长期与命令行打交道的开发者,我始终在寻找更自然的交互方式。键盘输入固然高效,但在某些场景下——比如双手被占用时调试代码、厨房里边做饭边查…...
质子交换膜燃料电池Comsol完整版仿真模型:涵盖两相流非等温雾状流道、液态水相变及扩散项,考...
质子交换膜燃料电池仿真Comsol完整版 虽然氢电发文量多了,但是氢电模型复杂程度和别的领域没法比,两相流非等温的氢燃料电池,跑通的都得好几千的,这个模型的流道和内侧都是多相流,这个里面是雾状流的流道,目…...
17:L关注AI伦理:蓝队的道德防御
作者: HOS(安全风信子) 日期: 2026-03-17 主要来源平台: GitHub 摘要: 当基拉开始利用AI的伦理漏洞时,传统的安全防御已无法应对。L将AI伦理原则融入安全防御,构建符合道德规范的安全体系。本文拆解L如何在…...
ARMv8、AArch64 与 arm64:命名与体系结构要点
ARMv8、AArch64 与 arm64:命名与体系结构要点 ARMv8 指 ARM 架构的一个主版本代际;AArch64 是该代际下的 64 位执行状态与 A64 指令集;arm64 与 aarch64 是操作系统与工具链中对 AArch64 的常用三元组/目录名,二进制约定一致。下…...
nli-distilroberta-base在工业质检文档中的应用:SOP操作步骤与现场记录逻辑一致性核查
nli-distilroberta-base在工业质检文档中的应用:SOP操作步骤与现场记录逻辑一致性核查 1. 项目背景与价值 在工业制造领域,标准作业程序(SOP)与现场操作记录的一致性核查是质量管理的核心环节。传统人工核查方式存在效率低、主观性强、覆盖不全等问题。…...
云容笔谈·东方红颜影像生成系统与ComfyUI工作流集成:可视化节点式创作
云容笔谈东方红颜影像生成系统与ComfyUI工作流集成:可视化节点式创作 如果你是一位数字艺术家或者技术美术,可能常常面临这样的困境:你有一个绝佳的创意,比如想生成一幅融合了东方古典美学与现代光影的“红颜”肖像,但…...
