//二叉树操作#include<iostream>
#include<algorithm>
using namespace std;//准备数据#define MANLEN 20
typedef char DATA;
typedef struct CBT
{DATA data;struct CBT*left;struct CBT*right;
}CBTT;//初始二叉树,设置一个根节点CBTT* InitTree()
{CBTT* node;if (node = (CBTT*)malloc(sizeof(CBTT))){cout << "请先输入一个根节点数据: " << endl;cin >> node->data;node->left = nullptr;node->right = nullptr;if (node != nullptr){return node;}else{return nullptr;}return nullptr;}
}//添加结点
void AddTreeNode(CBTT* treeNode)
{CBTT* pnode, *parent;DATA data;char menusel;if (pnode = (CBTT*)malloc(sizeof(CBTT))){cout << "请输入要加入的数据: " << endl;cin >> pnode->data;pnode->left = nullptr;pnode->right = nullptr;cout << "请输入该结点的父结点数据: " << endl;fflush(stdin);cin >> data;parent = TreeFindNode(treeNode, data);if (!parent){cout << "未找到该父节点!" << endl;free(pnode);return;}cout << "1.添加到左子树 \n 2.添加到右子树" << endl;do{menusel = getchar();menusel = '0';if (menusel == 1 || menusel == 2){if (parent == nullptr){cout << "不存在父结点,请先设置父结点" << endl;}else{switch (menusel){case 1:if (parent->left){cout << "左子树不为空" << endl;}else{parent->left = pnode;}break;case 2:if (parent->right){cout << "右子树不为空" << endl;}else{parent->right = pnode;}break;default:cout << "无效参数" << endl;}}}} while (menusel!=1 && menusel!=2);}}//查找结点,先判断根是否为空然后递归查找左右子树
CBTT* TreeFindNode(CBTT* treeNode, DATA data)
{CBTT* ptr;if (treeNode == nullptr){return nullptr;}else{if (treeNode->data == data){return treeNode;}else{if (ptr = TreeFindNode(treeNode->left)){return ptr;}else if (ptr = TreeFindNode(treeNode->right)){return ptr;}else{return nullptr;}}}
}//获取左子树
CBTT* TreeLeftNode(CBTT* treeNode)
{if (treeNode){return treeNode->left;}else{return nullptr;}}//获取右子树
CBTT* TreeRightNode(CBTT* treeNode)
{if (treeNode){return treeNode->right;}else{return nullptr;}}//计算二叉树的深度
int TreeDepth(CBTT* treeNode)
{int depleft, depright;if (treeNode == nullptr){return 0;}else{depleft = TreeDepth(treeNode->left);depright = TreeDepth(treeNode->right);if (depleft > depright){return depleft + 1;}else{return depright + 1;}}
}//清空二叉树
void ClearTree(CBTT* treeNode)
{if (treeNode){ClearTree(treeNode->left);ClearTree(treeNode->right);free(treeNode);treeNode = nullptr;}
}//前序遍历void preorderTrav(CBTT* treeNode)
{if (treeNode == nullptr)return;cout << treeNode->data;preorderTrav(treeNode->left);preorderTrav(treeNode->right);
}//中序遍历void preorderTrav(CBTT* treeNode)
{if (treeNode == nullptr)return;preorderTrav(treeNode->left);cout << treeNode->data;preorderTrav(treeNode->right);
}//后续遍历void preorderTrav(CBTT* treeNode)
{if (treeNode == nullptr)return;preorderTrav(treeNode->left);preorderTrav(treeNode->right);cout << treeNode->data;
}//求二叉树高度
int getTreeHigh(CBTT* root)
{if (root == NULL)return 0;int left_high = getTreeHigh(root->left);int right_high = getTreeHigh(root->right);return max(left_high, right_high) + 1;
}

(Tree)二叉树基本操作相关推荐

  1. C站万字详解二叉树基本操作演示程序(附图)

    文章目录 一.实验环境 二.设计需求分析 三.实际设计思路 四.对象与功能剖析 五.代码实现及算法思路分析 BinaryTree包 [二叉树节点类(TreeNode)] [二叉树类(Tree)] [字 ...

  2. 数据结构 【实验7 二叉树基本操作】

    实验7   二叉树基本操作 实验目的 1.  熟悉二叉树结点的结构和对二叉树的基本操作. 2.  掌握对二叉树每一种操作的具体实现. 3.  学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法 ...

  3. [LeetCode] Invert Binary Tree - 二叉树翻转系列问题

    目录: 1.Invert Binary Tree - 二叉树翻转 [递归] 题目概述: Invert a binary tree. 4/ \2 7/ \ / \ 1 3 6 9 to 4/ \7 2/ ...

  4. [CareerCup] 4.7 Lowest Common Ancestor of a Binary Search Tree 二叉树的最小共同父节点

    4.7 Design an algorithm and write code to find the first common ancestor of two nodes in a binary tr ...

  5. B-Tree/B+-Tree/二叉树/红黑树/Hash表/MySQL底层到底用哪个数据表建立索引做快速查找?

    B-Tree/B+-Tree/二叉树/红黑树/Hash表/MySQL底层到底用哪个数据表建立索引做快速查找? ~~B-Tree~~ ==B+Tree== ~~二叉树(Binary Search Tre ...

  6. LeetCode 545. Boundary of Binary Tree 二叉树边界

    LeetCode 545. Boundary of Binary Tree 二叉树边界 Given a binary tree, return the values of its boundary i ...

  7. 二叉树的基本运算实验报告C语言,实验三 二叉树基本操作与应用实验

    实验三 二叉树基本操作与应用实验 第三次实验主要包括两部分内容:1.二叉树基本操作实验:2.二叉树应用-赫夫曼树与赫夫曼编码实验.基本操作包括存储结构建立和遍历算法,本文只给出部分参考程序,请大家尽量 ...

  8. 二叉树前序中序后续线索树_后序线索二叉树怎么画 线索二叉树基本操作详解 - 办公软件 - 服务器之家...

    后序线索二叉树怎么画 线索二叉树基本操作详解 发布时间:2017-05-23 来源:服务器之家 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列.这实际上 ...

  9. 二叉树基本操作:利用队列实现层序遍历

    利用队列实现层序遍历 关于二叉树其他的基本操作可以看我前几篇文章: 二叉树的基本操作:二叉树的后序遍历非递归算法 二叉树的遍历:前序非递归和中序非递归 二叉树基本操作:二叉树的创建与递归遍历 基础知识 ...

最新文章

  1. pytorch 状态字典:state_dict 模型和参数保存
  2. 马斯克脑洞破解谁是“中本聪”?
  3. oracle取两条sql查询结果的差集,并集,交集
  4. 以吃货的角度理解 IaaS,PaaS,SaaS 是什么
  5. 现实复杂 devops解决_咖啡店DevOps:变革的复杂性
  6. 最新性能测试:Kafka、Pulsar 和 Pravega 哪个最强?
  7. python第一题 引发的思考和学习
  8. 【转】详解JavaScript中的this指针
  9. 思科又发紧急安全通告 IOS集群管理协议漏洞和Struts2漏洞 有影响产品列表及应对措施了...
  10. js制作随机抽奖,(指定数字范围内随机出现一个数字)
  11. Ecshop源码阅读
  12. ie8打完补丁重启报错
  13. Gambit 4.运行时选项
  14. fot mac matlab_Matlab for Mac
  15. 基站的小区号256变换
  16. 【经典算法题-2】费式数列(Fibonacci数列)
  17. BPDU Guard, BPDU Filter, Root Guard, Loop Guard UDLD
  18. 向SQL Server数据库中插入日期型数据
  19. 【滤波估计】基于双卡尔曼滤波实现soc和soh联合估计附matlab代码
  20. 被尘封的故事技能点bug_幻象冰龙能减速?死亡缠绕打不死兵?这些War3里的Bug你都知道吗?...

热门文章

  1. 创建一个坚固的备份系统
  2. 26.0.0-alpha1_WildFly 8.0.0.Alpha1的发布和一些历史
  3. defender 删除_Java 8中的默认方法(Defender方法)简介
  4. nosql的数据服务_使用NoSQL实现实体服务–第3部分:CouchDB
  5. Java在几乎所有方面都可以胜任本机响应
  6. 如何使用Eclipse调试Maven构建
  7. 玩Weld-Probe –一站式查看CDI的所有方面
  8. 40行中的持久性KeyValue Server和一个可悲的事实
  9. 快速检查REST API是否有效的方法-从清单文件中获取详细信息
  10. Apache Cassandra和Java入门(第二部分)