C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现【可运行】

#include <stdio.h>
#include <stdlib.h> typedef int KeyType; typedef struct node
{
KeyType key;
struct node* lchild, * rchild;
}BSTNode, * BSTree;
//二叉排序树递归插入操作
int InsertBST1(BSTree& T, int k) {
if (T == NULL) {//原树为空,新插入的结点为根结点 T = (BSTree)malloc(sizeof(BSTNode));
if (T == NULL) {
return 0;//内存分配失败的情况
}
T->key = k;
T->lchild = T->rchild = NULL;
return 1;//返回1, 插入成功
}
else if (k == T->key) {//树中存在相同关键字的结点,插入失败
return 0;
}
else if (k < T->key) {
return InsertBST1(T->lchild, k); //如果插入的值小于结点的值,则递归插入函数进行查找
}
else {
return InsertBST1(T->rchild, k); //如果插入的值大于结点的值,则递归插入函数进行查找
}
}
//二叉排序树非递归插入操作
int InsertBST2(BSTree& T, KeyType k)
{
BSTree q, s;//新增两个结点q,s
s = (BSTree)malloc(sizeof(BSTNode));//分配一个新节点
if (s == NULL) {
return 0;//内存分配失败的情况
}
s->key = k;//新结点存储的数据为插入的值
s->lchild = NULL;
s->rchild = NULL;
if (T == NULL)//如果当前结点为空则将新分配的结点s赋给当前结点
{
T = s;
return 1;
}
q = T;//
while (q) {//
BSTree p = q;
if (k == q->key){//如果插入的值等于结点的值,则释放新分配出的内存
free(s);
return 0;
}
if (k < q->key){//如果插入的值小于结点的值,则令该结点等于其左孩子结点
q = q->lchild;
if (q == NULL)
p->lchild = s;//如果该结点的还在结点等于空,则令其孩子结点等于结点s,否则继续找孩子为空的结点
}
else {//如果插入的值大于结点的值,则令该结点等于其右孩子结点
q = q->rchild;
if (q == NULL)
p->rchild = s;//如果该结点的还在结点等于空,则令其孩子结点等于结点s,否则继续找孩子为空的结点
}
}
q = s;
return 1; }
void CreateBST(BSTree &T)
{
KeyType key;
T = NULL;
scanf_s("%d", &key);
while (key!=0)
{
InsertBST2(T, key);
//InsertBST1(T, key);
scanf_s("%d", &key);
}
}
void InOrder(BSTree T)
{
if (T != NULL)
{ InOrder(T->lchild);
printf("%d ", T->key);//这个前置为先序遍历,后置为后序遍历
InOrder(T->rchild);
}
}
int main()
{
BSTree T;
printf("建立二叉排序树,请输入序列:\n");
CreateBST(T);
printf("中序遍历输出序列为:");
InOrder(T);
}
//34
//25
//56
//79
//12
//38
//先序遍历输出序列为:34 25 12 56 38 79
//中序遍历输出序列为:12 25 34 38 56 79
//后序遍历输出序列为:12 25 38 79 56 34

结果为

C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现【可运行】的更多相关文章

  1. IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较

    //代码块与代替代理的设计方法 我就以在自定义视图中(非视图控制器,不能实现视图控制功能),通过代理和代码块两种方法分别实现视图的跳转,进行对比 首先自定义了一个视图,上面有一个已经注册了得BUtto ...

  2. 在SQL Server 2005中连接Oracle,完成查询、插入操作

    建立指向Oracle的连接假设Oracle数据库的用户名为test,密码为test,在SQL Server数据库所在服务器上建立的指向Oracle数据库的服务命名为hisorcl.1. 在SQL Se ...

  3. 二叉树中序遍历,先序遍历,后序遍历(递归栈,非递归栈,Morris Traversal)

    例题 中序遍历94. Binary Tree Inorder Traversal 先序遍历144. Binary Tree Preorder Traversal 后序遍历145. Binary Tre ...

  4. 【LeetCode-面试算法经典-Java实现】【145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)】

    [145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bin ...

  5. 未经处理的异常在 System.Data.dll 中发生。其它信息:在应使用条件的上下文(在 &#39;***&#39; 附近)中指定了非布尔类型的表达式。

    机房收费系统中,有些人在联合查询这个模块用的是存储过程.我先尝试着在数据库中建立了一个视图.然后在UI层做个推断并生成查询条件strCondition. 在机房收费系统的"联合查询" ...

  6. leetcode 257. 二叉树的所有路径 包含(二叉树的先序遍历、中序遍历、后序遍历)

    给定一个二叉树,返回所有从根节点到叶子节点的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 输入: 1 / \2 3 \ 5 输出: ["1->2->5", & ...

  7. 【LeetCode】105. Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcod ...

  8. 二叉树的先序、中序以及后序遍历(递归 && 非递归)

    树节点定义: class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } 递归建立二 ...

  9. 前序 中序 后序 遍历 递归 非递归算法 java实现

    前序遍历 非递归 public void preordernorec(TreeNode root){ //System.out.println("先序遍历(非递归):"); //用 ...

随机推荐

  1. C语言中i++和++i的区别

    这一篇更详细: 转载:https://blog.csdn.net/Bug_fuck/article/details/85229229 C语言中++i和i++是有区别的!快速理解的话就是用一句话概括:1 ...

  2. Jmeter JDBC Request 使用详解

    本篇博文讲解以MySQL为例,搞懂JDBC Request中MySQL的使用方法,换成其它数据库, 如Oracle.PSQL也会很容易上手. 一.基本配置 1.首先我们先了解一下,不同数据库的驱动类和 ...

  3. nginx的脚本引擎(二)rewrite

    其实rewrite指令和上一篇说的if/set/return/break之类的没多大差别,但是rewrite用起来相对复杂,我就把他单独放到了这里.想要弄懂nginx的脚本引擎需要先明白处理reque ...

  4. JSON,数组根据字段多次分组

    我们在前端开发过程中,遇到json对象,有时会需要多次分组.比如说,先按照是业务分组,然后再按照产品线分组,然后通过table或其他方式展示或操作 var obj1=[ { "demp&qu ...

  5. OpenCV计算机视觉学习(5)——形态学处理(腐蚀膨胀,开闭运算,礼帽黑帽,边缘检测)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 形态 ...

  6. Linux操作系统的基本介绍

    01 操作系统的概述介绍 操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序.操作系统需要处理如管理与配置内存.决定系统资源供需的优先次序.控制输入设备与输出 ...

  7. centos8环境安装配置rsync

    一,查看本地centos的版本: [root@localhost lib]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) ...

  8. jquery $.ajax 获取josn数据

    <script type="text/javascript" src="jquery-1.9.1.js"></script> <s ...

  9. .net 连接数据库实例

    web.config配置 <appSettings> <add key="ConnectionString" value="server=.;datab ...

  10. 白话k8s-Pod的组成

    k8s的所有功能都是围绕着Pod进行展开的,我们经常会看到类似这样一张图 告诉我们,Pod是一组container的集合,container之间可以通过localhost:port的方式直接访问. 感 ...