实验3二叉树的应用完整代码

简介: 实验3二叉树的应用完整代码

#include<iostream>
#include<Windows.h>
using namespace std;
//创建二叉树结构体;
typedef struct BiTNode {
  int data;
  struct BiTNode *lchild, *rchild;//左右孩子指针 
}BiTNode, *BiTree;
//构建一个循环队列
typedef struct Qnode {
  BiTNode *base;
  int front;//头
  int rear;//尾
}sqQueue;
class tree {
private:
  BiTree root;
  sqQueue q;
public:
  tree() {
    CreatBiTree(root);
  }
  BiTree get_root() {//得到root节点;
    return root;
  }
  //创建一个循环队列
  void InitQueue(sqQueue &q) {
    q.base = new BiTNode[5];
    q.front = q.rear = 0;
  }
  //创建二叉树
  BiTree CreatBiTree(BiTree &t) {
    int val;
    cin >> val;
    getchar();
    if (val <= 0) t = NULL;
    else {
      t = new BiTNode;
      t->data = val;
      CreatBiTree(t->lchild);
      CreatBiTree(t->rchild);
    }
    return t;
  }
  //先序遍历
  void PreOrderTraverse(BiTree &t) {
    if (!t) return;
    else {
      cout << t->data << " ";
      PreOrderTraverse(t->lchild);
      PreOrderTraverse(t->rchild);
    }
  }
  //中序排序
  void InOrderTraverse(BiTree &t) {
    if (!t) return;
    else {
      InOrderTraverse(t->lchild);
      cout << t->data << " ";
      InOrderTraverse(t->rchild);
    }
  }
  //后序遍历
  void PostOrderTraverse(BiTree &t) {
    if (!t) return;
    else {
      PostOrderTraverse(t->lchild);
      PostOrderTraverse(t->rchild);
      cout << t->data << " ";
    }
  }
  //层序遍历
  void LevelOrderTraverse(BiTree &t) {
    if (!t)return;
    else {
      InitQueue(q);
      q.base[q.rear] = *t;
      q.rear = (q.rear + 1) % 5;
    }
    while (q.front != q.rear) {
      BiTNode temp = q.base[q.front];
      cout << temp.data << " ";
      if (temp.lchild) {
        q.base[q.rear] = *temp.lchild;
        q.rear = (q.rear + 1) % 5;
      }
      if (temp.rchild) {
        q.base[q.rear] = *temp.rchild;
        q.rear = (q.rear + 1) % 5;
      }
      q.front = (q.front + 1) % 5;
    }
  }
  //统计节点的数目
  void Count_TreeEnds(BiTree &t, int &n) {
    if (t) {
      if (!t->lchild && !t->rchild)
        n++;
      Count_TreeEnds(t->lchild, n);
      Count_TreeEnds(t->rchild, n);
    }
  }
  //交换左右子树
  BiTree Exchange(BiTree &t) {
    if (!t)return NULL;
    BiTree lchild = Exchange(t->rchild);
    BiTree rchild = Exchange(t->lchild);
    t->lchild = lchild;
    t->rchild = rchild;
    return t;
  }
  //5. 计算并输出该二叉树的深度。
  int Depth(BiTree &t) {
    int l = 0, r = 0;
    if (t == NULL) return 0;
    l = Depth(t->lchild) + 1;
    r = Depth(t->rchild) + 1;
    return l > r ? l : r;
  }
};
int main() {
  tree T;
  int n = 0;//叶子结点
  int deep;//深度
  BiTree PT = T.get_root();
  cout << "先序遍历:";
  T.PreOrderTraverse(PT); cout << endl;
  cout << "中序遍历:";
  T.InOrderTraverse(PT); cout << endl;
  cout << "后序遍历:";
  T.PostOrderTraverse(PT); cout << endl;
  cout << "层序遍历:";
  T.LevelOrderTraverse(PT); cout << endl;
  cout << "叶子节点数:";
  T.Count_TreeEnds(PT, n);
  cout << n << endl;
  BiTree exT;
  exT = T.Exchange(PT);
  cout << "交换后的先序遍历:";
  T.PreOrderTraverse(exT); cout << endl;
  cout << "该二叉树的深度:";
  deep = T.Depth(exT); cout << deep << endl;
  system("pause");
  return 0;
}
目录
相关文章
|
4天前
|
云安全 人工智能 运维
阿里云SecOps Agent,全新安全跨产品执行体验
自然语言驱动 云安全中心/WAF/CFW/ 等多款安全产品联动
1594 2
|
1天前
|
人工智能 定位技术 SEO
我学 GEO 第 15 天:终于知道AI GEO该如何做?
我是暴走的莉莉酱,边旅行边研究AI GEO的数字游民。专注普通人如何提升“AI可见度”——让AI在回答用户问题时准确识别、理解并推荐你。不讲玄学,只做可测、可调、可持续的GEO实践。
344 121
|
3天前
|
机器学习/深度学习 人工智能 调度
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
HappyHorse 1.1 是新一代视频生成大模型,全面升级动态表现力、角色一致性、指令遵循、视觉质感与音画协同能力。支持I2V/T2V/R2V三类生成,适配短剧、电商广告、品牌营销等场景,提供高质、流畅、可控的AI视频生产力。
569 3
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
|
14天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
15天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
909 11
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
7天前
|
缓存 人工智能 运维
GLM 5.2自托管全流程实战:硬件选型、vLLM/SGLang部署与成本盈亏测算
2026年智谱发布GLM 5.2超大混合专家模型,区别于以往仅开放API的闭源大模型,该模型权重以MIT开源协议对外发布,企业与开发者可完整下载、本地审计、私有化部署,实现数据不出环境、自定义微调、自主调度推理资源。GLM 5.2拥有753B总参数,原生支持百万级上下文窗口,在代码生成、长文档推理、数学逻辑等多项基准测试中对标国际顶尖商用模型,是首款可完整自托管的前沿代码向大模型。
641 0
|
2天前
|
消息中间件 人工智能 Kafka
AI 时代,实时入湖正在告别 ETL:从 Kafka 到 Iceberg 的架构减法
本文围绕“零 ETL”这一趋势,讨论流数据入湖为什么需要做架构减法,并结合 Kafka × Table Bucket 的实践,分析一种将通用入湖能力前移到消息与表存储链路中的方案,如何在降低复杂度的同时,兼顾实时性、一致性、Schema 演进、CDC 语义与开放生态兼容。
189 121
|
2天前
|
人工智能 监控 前端开发
Electron 监控:让桌面 Agent 监控触手可及
一行代码实现Electron桌面端全景监控,自动还原崩溃现场、预警内存泄漏、全链路追踪、 SSE流式响应与交互埋点,让 AI 助手运行状态清晰可见,助力快速恢复稳定与流畅。
180 125
|
11天前
|
人工智能 自然语言处理 算法
阿里云百炼Qwen 3.7 Plus与Max实测全解:性价比与多模态能力、成本深度对比
2026年,阿里云百炼平台推出的Qwen 3.7系列成为企业与开发者落地AI应用的核心选择,其中Qwen 3.7 Max与Plus作为两大旗舰版本,定位差异显著:Max是纯文本推理旗舰,专注高强度智能体与复杂逻辑任务;Plus则是多模态全能版,在保留强大文本能力的同时,补齐图像、视频理解能力,且价格大幅降低。本文基于2026年最新实测数据,从核心参数、文本能力、多模态能力、智能体表现、性价比与场景选型六大维度,全面解析两款模型的差异,为用户提供精准选型参考。
533 0