C++二叉排序树代码实现
以下是C++控制台程序,实现了二叉排序树的创建和遍历,仅是练习的小程序,分享一下。
#include "stdafx.h"#include <iostream>
using namespace std;//二叉树节点
struct BiTree {
int data;
BiTree* lchild;
BiTree* rchild;
};int main()
{
BiTree* InsertBST(BiTree* t, int key);
BiTree* CreateBiTree(BiTree* tree, int data[], int n);
void DelBiTree(BiTree* tree);
void PreOrder(BiTree* tree);
void InOrder(BiTree* tree);
void PostOrder(BiTree* tree);int a[] = { 0,2,55,6 };
BiTree* root = NULL;
BiTree* T = NULL;
root = new BiTree();
//初始化根节点
root->data = a[0];
root->lchild = root->rchild = NULL;
T=CreateBiTree(root, a, 4);
cout << "先序遍历:" << endl;
PreOrder(T);
cout << endl;
cout << "中序遍历:" << endl;
InOrder(T);
cout << endl;
cout << "后序遍历:" << endl;
PostOrder(T);
DelBiTree(T);
getchar();return 0;
}//在二叉排序树插入值为key的节点,t为树的根节点//二叉排序树的性质://(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
//(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
//(3)左、右子树也分别为二叉排序树;
//以引用方式传参,使得CreateBiTree中返回值是树的根
void InsertBST(BiTree* &t, int key) {
BiTree* temp = NULL;
//先判断节点是否存在,如果不存在,则新建节点
if (t == NULL) {
temp = new BiTree();
temp->lchild = temp->rchild = NULL;
temp->data = key;
t = temp;
return;
}
//新插入的点总是叶子节点,不能插在中间if (key < t->data) {
InsertBST(t->lchild, key);//key小,则插入左子树
}
else if(key > t->data) {
InsertBST(t->rchild, key);//key大,则插入右子树,key等于根节点则不插入
}
}//创建二叉排序树,data是数组名,n是数组长度
BiTree* CreateBiTree(BiTree* tree,int data[],int n) {
for (int i = 0; i < n; i++) {
InsertBST(tree, data[i]);
}
return tree;
}//删除二叉树,tree为根节点
void DelBiTree(BiTree* tree) {
if (tree) {
DelBiTree(tree->lchild);
DelBiTree(tree->rchild);
delete tree;
}
}//先序遍历
void PreOrder(BiTree* tree) {
if (tree) {
cout << tree->data << " ";
PreOrder(tree->lchild);
PreOrder(tree->rchild);
}
}//中序遍历
void InOrder(BiTree* tree) {
if (tree) {
InOrder(tree->lchild);
cout << tree->data << " ";
InOrder(tree->rchild);
}
}//后续遍历
void PostOrder(BiTree* tree) {
if (tree) {
PostOrder(tree->lchild);
PostOrder(tree->rchild);
cout << tree->data << " ";
}
}
C++二叉排序树代码实现相关推荐
- 二叉排序树(完整代码)
目录 二叉排序树 1.二叉排序树(代码) P1087 FBI树 (建树) HDU 4707 Pet 二叉排序树 先序遍历:根->左->右 中序遍历:左->根->右 后序遍历:左 ...
- 【Java数据结构】二叉排序树
二叉排序树 为什么需要二叉排序树? 什么是二叉排序树(BST)? 二叉排序树代码实现 二叉排序树添加节点 二叉排序树查找节点 二叉排序树删除节点 搜索父节点 删除一颗树中最小的节点并获取值 删除没有子 ...
- 第 11 章 树结构实际应用
第 11 章 树结构实际应用 1.堆排序 1.1.堆排序基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法, 堆排序是一种选择排序, 它的最坏, 最好, 平均时间复杂度均为 O(nlogn), ...
- 树结构(Java实现)
树结构基础 树的常用术语 二叉树概念 代码实现 package com.xz.tree;/*** @author 许正* @version 1.0*/ public class ArrBinaryTr ...
- Python二叉树详解笔记
目录 二叉树数据结构 简介 为何选择树 树的主要应用包括: 二叉树的类型 满二叉树(Full binary tree) 完全二叉树(Complete binary tree) 完美二叉树(Perfec ...
- 数据结构(java版)
一.绪论 1.数据结构概论 数据结构研究计算机的操作对象以及他们之间的关系和操作. 2.算法的定义.特征以及要求 算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转化为输出的计算 ...
- 隐私合规:收集SDK部分介绍
com.meizu.cloud.pushsdk.SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送服务,开发者可以向集成了魅族 push SDK 的客户端实时地推送通知或者消 ...
- 平衡二叉排序树(完整案例详解及完整C代码实现)
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
- 二叉排序树(完整案例与完整C语言代码)
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
最新文章
- .tcl文件_TCL电视如何安装第三方软件?当贝市场分享最新教程
- python写一个文件下载器_python使用tcp实现一个简单的下载器
- URL 路径长度限制(错误:指定的文件或文件夹名称太长)
- Linux 30岁了~我们也老了
- Jenkins修改管理员密码
- Eclipse修改相同内容的高亮显示(pydev编辑python)
- python ^ 操作在两整数加法运算中的妙用
- 明华RD读卡器校验密码问题
- 大电流dcdc降压芯片20a_详细计算公式丨Buck降压开关电源的功率损耗
- 企业如何做好服务器防护45.113.201.1
- postman(一)常用的Tests方法
- 三炮的三舅走了,才发觉日子真的不经念叨呀!
- java 解析word模板为xml, 动态填充数据到xml,最后输出word文档
- 读书笔记(8)网络故障排除工具
- Java代码加密混淆工具有哪些?
- 网站域名被劫持、网站dns被劫持 域名跳转到别的网站的解决方法
- react 前端实现打印发票/图片
- vue控制台报错Duplicate keys detected:‘xxxx‘.This may canse an update error
- 佳宜合同管理软件(企业版)
- git拉取代码如何解决冲突_Git工具-git pull拉取代码时冲突的解决办法
热门文章
- 開機顯示器不顯示,提示no signal ......
- 嘛:如何远视 还有遥远的未来
- 老毛桃 固态硬盘 系统迁移
- MySQL 报错1055
- 项目管理九大知识领域五大过程组
- java 网格包,一个网格包的问题
- CSS反爬获取伪元素的值
- 计算机电子预览室配置清单,完整的停车场管理系统设计方案-附停车场管理详细大样图及安装图!...
- 计算机深度睡眠状态啥意思,什么是计算机的“深度睡眠”模式?
- 使用MFC绘制一些简单图形