(Tree)二叉树基本操作
//二叉树操作#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)二叉树基本操作相关推荐
- C站万字详解二叉树基本操作演示程序(附图)
文章目录 一.实验环境 二.设计需求分析 三.实际设计思路 四.对象与功能剖析 五.代码实现及算法思路分析 BinaryTree包 [二叉树节点类(TreeNode)] [二叉树类(Tree)] [字 ...
- 数据结构 【实验7 二叉树基本操作】
实验7 二叉树基本操作 实验目的 1. 熟悉二叉树结点的结构和对二叉树的基本操作. 2. 掌握对二叉树每一种操作的具体实现. 3. 学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法 ...
- [LeetCode] Invert Binary Tree - 二叉树翻转系列问题
目录: 1.Invert Binary Tree - 二叉树翻转 [递归] 题目概述: Invert a binary tree. 4/ \2 7/ \ / \ 1 3 6 9 to 4/ \7 2/ ...
- [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 ...
- B-Tree/B+-Tree/二叉树/红黑树/Hash表/MySQL底层到底用哪个数据表建立索引做快速查找?
B-Tree/B+-Tree/二叉树/红黑树/Hash表/MySQL底层到底用哪个数据表建立索引做快速查找? ~~B-Tree~~ ==B+Tree== ~~二叉树(Binary Search Tre ...
- LeetCode 545. Boundary of Binary Tree 二叉树边界
LeetCode 545. Boundary of Binary Tree 二叉树边界 Given a binary tree, return the values of its boundary i ...
- 二叉树的基本运算实验报告C语言,实验三 二叉树基本操作与应用实验
实验三 二叉树基本操作与应用实验 第三次实验主要包括两部分内容:1.二叉树基本操作实验:2.二叉树应用-赫夫曼树与赫夫曼编码实验.基本操作包括存储结构建立和遍历算法,本文只给出部分参考程序,请大家尽量 ...
- 二叉树前序中序后续线索树_后序线索二叉树怎么画 线索二叉树基本操作详解 - 办公软件 - 服务器之家...
后序线索二叉树怎么画 线索二叉树基本操作详解 发布时间:2017-05-23 来源:服务器之家 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列.这实际上 ...
- 二叉树基本操作:利用队列实现层序遍历
利用队列实现层序遍历 关于二叉树其他的基本操作可以看我前几篇文章: 二叉树的基本操作:二叉树的后序遍历非递归算法 二叉树的遍历:前序非递归和中序非递归 二叉树基本操作:二叉树的创建与递归遍历 基础知识 ...
最新文章
- pytorch 状态字典:state_dict 模型和参数保存
- 马斯克脑洞破解谁是“中本聪”?
- oracle取两条sql查询结果的差集,并集,交集
- 以吃货的角度理解 IaaS,PaaS,SaaS 是什么
- 现实复杂 devops解决_咖啡店DevOps:变革的复杂性
- 最新性能测试:Kafka、Pulsar 和 Pravega 哪个最强?
- python第一题 引发的思考和学习
- 【转】详解JavaScript中的this指针
- 思科又发紧急安全通告 IOS集群管理协议漏洞和Struts2漏洞 有影响产品列表及应对措施了...
- js制作随机抽奖,(指定数字范围内随机出现一个数字)
- Ecshop源码阅读
- ie8打完补丁重启报错
- Gambit 4.运行时选项
- fot mac matlab_Matlab for Mac
- 基站的小区号256变换
- 【经典算法题-2】费式数列(Fibonacci数列)
- BPDU Guard, BPDU Filter, Root Guard, Loop Guard UDLD
- 向SQL Server数据库中插入日期型数据
- 【滤波估计】基于双卡尔曼滤波实现soc和soh联合估计附matlab代码
- 被尘封的故事技能点bug_幻象冰龙能减速?死亡缠绕打不死兵?这些War3里的Bug你都知道吗?...
热门文章
- 创建一个坚固的备份系统
- 26.0.0-alpha1_WildFly 8.0.0.Alpha1的发布和一些历史
- defender 删除_Java 8中的默认方法(Defender方法)简介
- nosql的数据服务_使用NoSQL实现实体服务–第3部分:CouchDB
- Java在几乎所有方面都可以胜任本机响应
- 如何使用Eclipse调试Maven构建
- 玩Weld-Probe –一站式查看CDI的所有方面
- 40行中的持久性KeyValue Server和一个可悲的事实
- 快速检查REST API是否有效的方法-从清单文件中获取详细信息
- Apache Cassandra和Java入门(第二部分)