数据结构之二叉树 树结构练习——排序二叉树的中序遍历 (排序建树+中序遍历)

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

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

输入包含多组数据,每组数据格式如下。

第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)

第二行包含n个整数,保证每个整数在int范围之内。

输出

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

示例输入

1
2
2
1 20

示例输出

2
1 20
#include <iostream>
#include <iomanip>
#include <string>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <vector>

using namespace std;

typedef struct node
{
    int data;
    struct node *ll;
    struct node *rr;
}Binode, *Bitree;

void Creat_Sort_Bitree(Bitree &root, int key )
{
    if(root==NULL)
    {
        root=new Binode;
        root->ll=NULL;
        root->rr=NULL;
        root->data=key;
        return ;
    }
    else
    {
        if(key < root->data)
        {
            Creat_Sort_Bitree(root->ll, key );
        }
        else
        {
            Creat_Sort_Bitree(root->rr, key );
        }
    }
}

int s[10000],e=0;

void In_order(Bitree p)
{
    if(p)
    {
        In_order(p->ll);
        s[e++]=p->data; //将该要被访问的数据 存进数组了。 一开始的时候写的直接输出, 但格式总是弄不对,只好放弃了那种写法!
        In_order(p->rr);
    }
}

int main()
{
    int n, dd;
    int i;
    Bitree root;
    while(cin>>n)
    {
        root=NULL;
        for(i=0; i<n; i++)
        {
            cin>>dd;
            Creat_Sort_Bitree(root, dd );
        }
        e=0;
        In_order(root);
        for(i=0; i<e; i++)
        {
            if(i==0)
              cout<<s[i];
            else
              cout<<" "<<s[i];
        }
        cout<<endl;
    }
    return 0;
}

看到一篇博客里,一个人的中序访问数据的写法:

void visit(BiTree T)
{
	if(T->data!=NULL)
	{
		if(f==1)
		{
			cout<<" "<<T->data;
		}
		else
		{
			cout<<T->data;
			f=1;
		}
	}
}

void InOrder(BiTree T)
{
	if(T)
	{
		InOrder(T->lchild);
		visit(T);
		InOrder(T->rchild);
	}
}
时间: 2024-07-30 11:34:32

数据结构之二叉树 树结构练习——排序二叉树的中序遍历 (排序建树+中序遍历)的相关文章

数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构.    a.树是n(≥0)结点组成的有限集合.{N.沃恩}     (树是n(n≥1)个结点组成的有限集合.{D.E.Knuth})      在任意一棵非空树中:        ⑴有且仅有一个没有前驱的结点----根(root).        ⑵当n>1时,其余结点有且仅有一个直接前驱.         ⑶所有结

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

树结构练习--排序二叉树的中序遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是--(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值.现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果. 输入 输入包含多组数据,每组数据格式如下.

树结构练习——排序二叉树的中序遍历(二叉搜索树)

树结构练习——排序二叉树的中序遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值.现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序 遍历的结果. 输入 输入包含多组数据,每组数据格式如下.

01-(2)数据结构- 一步一步写算法(之之排序二叉树)

前面我们讲过双向链表的数据结构.每一个循环节点有两个指针,一个指向前面一个节点,一个指向后继节点,这样所有的节点像一颗颗珍珠一样被一根线穿在了一起.然而今天我们讨论的数据结构却有一点不同,它有三个节点.它是这样定义的: [cpp] view plain copy typedef struct _TREE_NODE { int data; struct _TREE_NODE* parent; struct _TREE_NODE* left_child; struct _TREE_NODE* rig

javascript/js实现 排序二叉树数据结构 学习随笔

二叉树是一种数据结构.其特点是: 1.由一系列节点组成,具有层级结构.每个节点的特性包含有节点值.关系指针.节点之间存在对应关系. 2.树中存在一个没有父节点的节点,叫做根节点.树的末尾存在一系列没有子节点的节点,称为叶子节点.其他可以叫做中间节点. 3.树的根节点位于第一层,层级数越大,节点位置越深,层级数也叫做树高. 排序二叉树为二叉树的一种类型,其特点是: 1.节点分为左右子树. 2.在不为空的情况下,左子树子节点的值都小于父节点的值. 3.在不为空的情况下,右子树子节点的值都大于父节点的

数据结构之二叉树 树结构练习---判断给定森林中有多少棵树

树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory limit: 65536K 题目描述 众人皆知,在编程领域中,C++是一门非常重要的语言,不仅仅因为其强大的功能,还 因为它是很多其他面向对象语言的祖先和典范.不过这世上几乎没什么东西是完美的,C++也不例外,多继承结构在带来强大功能的同时也给软件设计和维护带来 了很多困难.为此,在java语言中,只允许单继承结构,并采用接口来模拟多继承.KK最近获得了一份java编写的迷你游戏的源代码,他对这份代码非常

数据结构之二叉树 树结构练习---二叉排序树

二叉排序树 Time Limit: 1000MS Memory limit: 65536K 题目描述 二叉排序树的定义是:或者是一棵空树,或者是 具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉排序树. 今天我们要判断两序列是否为同一二叉排序树 输入 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接下去一行是一个序列,序列长度小

野生前端的数据结构基础练习(7)——二叉树

网上的相关教程非常多,基础知识自行搜索即可. 习题主要选自Orelly出版的<数据结构与算法javascript描述>一书. 参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/btree 一.二叉树的基本知识 基本概念 一棵树最上面的点称为根节点,如果一个节点下面连接多个节点,那么该节点称为父节点,下面的节点称为子节点,二叉树的每一个节点最多有2个子节点,一个节点子节点的个数称为度,二叉树每个节点的度只能是0,1

排序二叉树

题目大意:请完成下面四个函数的定义(在tree.h文件中),使整个程序能够利用排序二叉树的结构对输入的数(不会出现相同的数),进行排序输出.节点的结构体在下面已给出,这个二叉树的特征是,左子数的值肯定比父节点小,右子树的值肯定比父节点的大.要求大家按照这个结构特征去构建二叉树,最后中序遍历输出就是我们要求的升序输出. 树的节点结构体为: typedef struct Node { struct Node *left; struct Node *right; int value; } Node;