[二叉查找树] 二叉排序树

题目描述

输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。

输入

输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。

输出

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一个数据之后有一个空格。

样例输入

1 2 2 8 15 4 21 10 5 39

样例输出

2 2 2 8 15 8 15 15 8 21 10 5 39 5 10 21 39 5 10 39 21

分析:题目涉及到了二叉查找树的建立,先序遍历,中序遍历,后序遍历。其中,二叉查找树的建立是在普通二叉树建立的基础上简单扩展来的,较为简单。此处的先、中、后序遍历与普通二叉树的相同。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>
using namespace std;

struct node
{
    int data;
    node * lchild,*rchild;
};

void insert(node * & root,int data)
{
    if(root==NULL)
    {
        root=new node;
        root->data=data;
        root->lchild=NULL;
        root->rchild=NULL;
        return ;
    }
    if(data==root->data)
    {
        return ;
    }
    else if(data<root->data)
    {
        insert(root->lchild,data);
    }
    else
    {
        insert(root->rchild,data);
    }
}

void preOrder(node * root)
{
    if(root!=NULL)
    {
        cout<<root->data<<" ";
        preOrder(root->lchild);
        preOrder(root->rchild);
    }
}

void inOrder(node * root)
{
    if(root!=NULL)
    {
        inOrder(root->lchild);
        cout<<root->data<<" ";
        inOrder(root->rchild);
    }
}

void postOrder(node * root)
{
    if(root!=NULL)
    {
        postOrder(root->lchild);
        postOrder(root->rchild);
        cout<<root->data<<" ";
    }
}

int main()
{
    int n;
    while(cin>>n)
    {
        node * root=NULL;
        for(int i=0;i<n;i++)
        {
            int a;
            cin>>a;
            insert(root,a);
        }
        preOrder(root);
        cout<<endl;
        inOrder(root);
        cout<<endl;
        postOrder(root);
        cout<<endl;
    }
}
时间: 2024-08-06 15:11:54

[二叉查找树] 二叉排序树的相关文章

二叉查找树(二叉排序树)的详细实现

1.序 详细实现了二叉查找树的各种操作:插入结点.构造二叉树.删除结点.查找.  查找最大值.查找最小值.查找指定结点的前驱和后继 2.二叉查找树简介 它或者是一棵空树:或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值: (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值: (3)左.右子树也分别为二叉排序树 3.二叉查找树的各种操作 此处给出代码,注释非常详细,具体操作请参考代码: 1 /*************************

二叉查找树(二叉排序树)(C语言)

#include<stdio.h> #include "fatal.h" struct TreeNode; typedef struct TreeNode *Position; typedef struct TreeNode *SearchTree; typedef int ElementType; SearchTree MakeEmpty(SearchTree T); Position Find(ElementType X,SearchTree T); Position

数据结构基础(18) --红黑树的设计与实现(1)

红黑树是一种自平衡的二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组(C++ STL 中的map/set).它是在1972年由Rudolf Bayer发明的,他称之为"对称二叉B树",它现代的名字是 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的.红黑树虽然很复杂,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目(来源百度

Java研发工程师知识点总结

Java研发工程师知识点总结 最近一次更新2017年12月08日 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 四.Java虚拟机 五.数据库(Sql.MySQL.Redis等) 六.算法与数据结构 七.计算机网络 八.操作系统(OS基础.Linux等) 九.其他 一.Java基础(语言.集合框架.OOP.设计模式等) 1. HashMap和Hashtable的区别 Hashtable是基于陈旧的Dicti

二叉查找树 _ 二叉排序树 _ 二叉搜索树_C++

一.数据结构背景+代码变量介绍 二叉查找树,又名二叉排序树,亦名二叉搜索树 它满足以下定义: 1.任意节点的子树又是一颗二叉查找树,且左子树的每个节点均小于该节点,右子树的每个节点均大于该节点. 2.由1可推出,任意节点的左孩子小于该节点,右孩子大于该节点 以上讨论的是左(右)孩子(子树)存在的情况 它的中序遍历是一个升序的排序 在参考代码中,我们定义有: 主程序中,k代表插入或删除或查找的节点的值 root,根节点位置:a[i],第 i 号节点的值:cl[i],第 i 号节点左孩子的位置:cr

二叉查找树(二叉排序树)创建,插入,删除操作。

二叉排序树 二叉排序树是一个基础的树的数据结构.应用非常多. 它的特性就是,左孩子小于parent,右孩子大于parent. 寻找节点 寻找节点就是直接根据数值的大小,从root节点开始遍历,大于当前遍历节点就向它的右子树查找,相反则查找它的左子树.然后返回. 查找最大最小节点 直接根据root节点,遍历到最右就是最大节点,遍历到最左,就是最小节点. 插入节点 插入节点我这里插入的节点都会成为叶子节点.根据大小的关系向下遍历,遍历到最后的节点,然后插入就可以了. 删除节点 这里删除节点是相对麻烦

二叉查找树(二叉排序树、有序二叉树)算法分析及实现

二叉查找树一般采用二叉链表作为其存储结构,我们这次也采用这样的实现.二叉查找树一般有查找.插入和删除等操作,其中查找是基础,没有查找,插入和删除则无从谈起:而删除算是难点,需处理四种不同的情况,分别是: 无左右孩子,(采取直接删除,须处理其父节点指针) 只有左孩子,(采取其父节点指针指向其左孩子) 只有右孩子.(采取其父节点指针指向其右孩子) 左右孩子都存在,(采取以直接前驱或直接后继代替,实现中我们采用直接前驱代替). 查找的过程比较简单,如果该节点不为空,若其值大于key(要查找的值),则继

二叉排序树(二叉查找树)

参考:http://student.zjzk.cn/course_ware/data_structure/web/chazhao/chazhao9.3.1.1.htm 1 #include "stdafx.h" 2 #include <iostream> 3 4 typedef int InfoType; //其它数据域,自定义 5 typedef int KeyType; //假定关键字类型为整数 6 typedef struct node //结点类型 7 { 8 Ke

二叉查找树(二叉排序树)

二叉排序树的建立,查找,删除节点的操作. #include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> using namespace std; struct node { int key;///结点值 node *left; node *right; node *parent;///指向父亲结点的指针 }; ///递归中序遍历排序二叉树 void show(n