以下是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. 二叉排序树(完整代码)

    目录 二叉排序树 1.二叉排序树(代码) P1087 FBI树 (建树) HDU 4707 Pet 二叉排序树 先序遍历:根->左->右 中序遍历:左->根->右 后序遍历:左 ...

  2. 【Java数据结构】二叉排序树

    二叉排序树 为什么需要二叉排序树? 什么是二叉排序树(BST)? 二叉排序树代码实现 二叉排序树添加节点 二叉排序树查找节点 二叉排序树删除节点 搜索父节点 删除一颗树中最小的节点并获取值 删除没有子 ...

  3. 第 11 章 树结构实际应用

    第 11 章 树结构实际应用 1.堆排序 1.1.堆排序基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法, 堆排序是一种选择排序, 它的最坏, 最好, 平均时间复杂度均为 O(nlogn), ...

  4. 树结构(Java实现)

    树结构基础 树的常用术语 二叉树概念 代码实现 package com.xz.tree;/*** @author 许正* @version 1.0*/ public class ArrBinaryTr ...

  5. Python二叉树详解笔记

    目录 二叉树数据结构 简介 为何选择树 树的主要应用包括: 二叉树的类型 满二叉树(Full binary tree) 完全二叉树(Complete binary tree) 完美二叉树(Perfec ...

  6. 数据结构(java版)

    一.绪论 1.数据结构概论 数据结构研究计算机的操作对象以及他们之间的关系和操作. 2.算法的定义.特征以及要求 算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转化为输出的计算 ...

  7. 隐私合规:收集SDK部分介绍

    com.meizu.cloud.pushsdk.SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送服务,开发者可以向集成了魅族 push SDK 的客户端实时地推送通知或者消 ...

  8. 平衡二叉排序树(完整案例详解及完整C代码实现)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  9. 二叉排序树(完整案例与完整C语言代码)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

最新文章

  1. .tcl文件_TCL电视如何安装第三方软件?当贝市场分享最新教程
  2. python写一个文件下载器_python使用tcp实现一个简单的下载器
  3. URL 路径长度限制(错误:指定的文件或文件夹名称太长)
  4. Linux 30岁了~我们也老了
  5. Jenkins修改管理员密码
  6. Eclipse修改相同内容的高亮显示(pydev编辑python)
  7. python ^ 操作在两整数加法运算中的妙用
  8. 明华RD读卡器校验密码问题
  9. 大电流dcdc降压芯片20a_详细计算公式丨Buck降压开关电源的功率损耗
  10. 企业如何做好服务器防护45.113.201.1
  11. postman(一)常用的Tests方法
  12. 三炮的三舅走了,才发觉日子真的不经念叨呀!
  13. java 解析word模板为xml, 动态填充数据到xml,最后输出word文档
  14. 读书笔记(8)网络故障排除工具
  15. Java代码加密混淆工具有哪些?
  16. 网站域名被劫持、网站dns被劫持 域名跳转到别的网站的解决方法
  17. react 前端实现打印发票/图片
  18. vue控制台报错Duplicate keys detected:‘xxxx‘.This may canse an update error
  19. 佳宜合同管理软件(企业版)
  20. git拉取代码如何解决冲突_Git工具-git pull拉取代码时冲突的解决办法

热门文章

  1. 開機顯示器不顯示,提示no signal ......
  2. 嘛:如何远视 还有遥远的未来
  3. 老毛桃 固态硬盘 系统迁移
  4. MySQL 报错1055
  5. 项目管理九大知识领域五大过程组
  6. java 网格包,一个网格包的问题
  7. CSS反爬获取伪元素的值
  8. 计算机电子预览室配置清单,完整的停车场管理系统设计方案-附停车场管理详细大样图及安装图!...
  9. 计算机深度睡眠状态啥意思,什么是计算机的“深度睡眠”模式?
  10. 使用MFC绘制一些简单图形