排序二叉树的中序遍历

Problem Description

在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。

Input。

第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。

Output

为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。

Example Input

1
2
//错误代码:Time limit exceeded
BiTree CreatBiTree(BiTree r,int m)
{BiTree p,q,w;p = (BiTree)malloc(sizeof(BiTNode));p->rchild = NULL;p->lchild = NULL;p->data = m;q = r;while(q)   {if(m>q->data){  w = q;q = q->rchild;}if(m<q->data)   //1:系统不运行:这个地方没加else,我以为只要在while里循环就行了,当q为空,直接跳出,{  w = q;        //巨巨找出错误,如果上一个if执行了,q变为空,么下一个ifm无法与q->data比较,所以错误q = q->lchild;  //2:只判断了大于小于,没判读等于,如果为等于号,那么一直在while里循环,所以造成time limit}}if(m>w->data)w->rchild = p;elsew->lchild = p;return r;}
/*
Time limit  出现的原因:
很多时候我们看到Time Limit Exceeded马上会想到一定是算法太慢,不符合要求,其实往往还可能遇到一种情况是没有判断输入结束,不然
系统一直在那等你的输出结果,发现你一直不输出,或者程序一直不退出,所以给Time Limit Exceeded。
*///下面是完整的代码:
#include <stdio.h>
#include <stdlib.h>
#define maxsize 10001
int j;
typedef struct BiTNode
{int data;struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree CreatBiTree(BiTree r,int m)
{BiTree p,q,w;p = (BiTree)malloc(sizeof(BiTNode));p->rchild = NULL;p->lchild = NULL;p->data = m;q = r;while(q){if(m>q->data){  w = q;q = q->rchild;}else if(m<=q->data)  //加了一个else,一个等于号{  w = q;q = q->lchild;}}if(m>w->data)w->rchild = p;elsew->lchild = p;return r;}
BiTree InitBiTree()  //初始化头结点
{BiTree root;root = (BiTree)malloc(sizeof(BiTNode));root->lchild = NULL;root->rchild = NULL;return root;}
void midPrint(BiTree root)//中序输出
{if(root){midPrint(root->lchild);if(j==1){j++;printf("%d",root->data);}elseprintf(" %d",root->data);midPrint(root->rchild);}
}
int main()
{int m;scanf("%d",&m);BiTree root;int a[maxsize],i;j = 1;root = InitBiTree();scanf("%d",&root->data);for(i = 1;i<=m-1;i++){scanf("%d",&a[i]);CreatBiTree(root,a[i]);}midPrint(root);printf("\n");return 0;
}

二叉排序树的中序遍历相关推荐

  1. 二叉排序树的中序遍历规律_看懂这篇文章,玩转二叉查找树

    所谓二叉查找树,就是按照二分进行查找,每次查询只需要选择其中一个子树就进行查找,从而减少查找次数,提升查询效率! 一.介绍 在前面的文章中,我们对树这种数据结构做了一些基本介绍,今天我们继续来聊聊一种 ...

  2. 二叉树 排序二叉树-可以通过中序遍历得到排序的数据 二叉排序树时间复杂度O(logn),...

    二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加.但是他也有自己的缺点:删除操作复杂. 虽然二叉排序树的最坏效率是O(n),但它支持动 ...

  3. 树结构练习——排序二叉树的中序遍历

    树结构练习--排序二叉树的中序遍历 Description 在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是--(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的 ...

  4. JAVA 中序遍历的非递归栈实现

    题目描述 请实现一个函数,检查一棵二叉树是否为二叉查找树. 给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树. import java.util.*;/* ...

  5. 二叉树的前序遍历、中序遍历、后序遍历

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 为什么需要树这种数据结构 树的常用术语 二叉树的概念 二叉树遍历的说明 实现二叉树 实现二叉树的遍历 二叉树查找结点 二叉树 ...

  6. python实现二叉树的重建2 之由中序遍历和后序遍历重建

    前言 通过上一节对python实现二叉树的重建1 之由前序遍历和中序遍历重建,我相信我们再来做这个问题就不难了,完全可以照猫画虎的来实现,具体的原理几乎是一样的,直接上代码了 code # 通用解法d ...

  7. python实现二叉树的重建1 之由前序遍历和中序遍历重建

    前言 此题是关于树的面试题目的常见题型,题目的含义很清晰,这个就不用多说了 解法 关于这道题的解法有很多不同的样式,通用的解法是这样的: 假如现在我们有如下两个遍历的情况 preorder: [1, ...

  8. 通过前序遍历和中序遍历构建二叉树 python实现

    前言 通过前序遍历和中序遍历构建二叉树的原理,主要是找前序遍历根节点在中序遍历中的位置,然后将二叉树而成左子树和右子树,然后依次进行这样的操作,思路还是比较简单的 代码 class Node:def ...

  9. python数据结构与算法:二叉树及三种遍历方式(先序遍历/中序遍历/后序遍历)

    树的实现采用queue的形式: 树的三种遍历方式(广度优先白能力法):先序遍历(根左右),中序遍历(左根右)以及后序遍历(左右根) ######################P6.4 数据结构### ...

最新文章

  1. 网页中显示flash的时候部分显示红色叉好,而有的能够正常显示
  2. u-boot分析之编译体验(零)
  3. 债券指数(Bond Index)
  4. C#中找不到MouseWheel事件的解决办法
  5. 苹果id是什么格式的_iTunes Converter mac(音频格式转换工具)
  6. Introduction to PCI Express | PDF
  7. 下载文件扩展名php,[宜配屋]听图阁
  8. 仿射组合(Affine Combination)的定义与性质
  9. 全球顶尖!StarVR推出搭载集成眼动追踪的VR设备
  10. ps 将图片背景色改为透明
  11. epub与txt的区别是什么?有什么好用的IOS手机epub阅读器
  12. 依托TAPD的敏捷实践
  13. 快递鸟预约快递员上门揽件API开发指南
  14. 语义分割论文-DeepLab系列
  15. 将矩阵逆时针旋转45°后输出
  16. SQL视图是什么?视图的作用,视图可以更改么?
  17. 连接器E-mark认证要准备什么资料?
  18. QT教程 休闲棋牌游戏开发(2)
  19. 如何编辑简单打字游戏
  20. 捷讯fw300r虚拟服务器口号,迅捷FW300R无线路由器WDS无线桥接设置方法

热门文章

  1. Deepin V20.2网络里没有无线选项以及grup引导界面进不去Windows系统
  2. 移动架构学习笔记八:化主动为被动的观察者模式
  3. ThinkPHP5篮球培训报名系统
  4. QT开发(十七)——QWT简介
  5. python命名中下划线的含义
  6. Android10.0 SystemUI 音量条去掉铃声设置等音量修改音量条样式
  7. linux gdb添加符号表,gdb – 什么是符号表,它如何集成到可执行文件中?
  8. Html 自定义标签
  9. 如何获取bssid_路由器Bssid如何获取?
  10. 基于NumPy的数组重塑与转置