二叉排序树的建立

二叉排序树是一种左子树的值小于根,而右子树的值大于根的的一棵树,通过中序遍历可以得到一个有序的序列= =

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct node
{
    int data;
    struct node *left,*right;
}binode ,*bitree;
bool find(bitree T,int k,bitree f,bitree &p)//查找函数,在T树找查找k是否存在,f表示T的双亲节点,p用来指向查找路径中的最后一个节点
{
    if(T==NULL)
    {
        p=f;
        return false;
    }
    else if(k==T->data)
    {
        p=T;
        return true;
    }
    else if(k<T->data)
    return find(T->left,k,T,p);
    else
    return find(T->right,k,T,p);
}
int insert(bitree &T,int k)
{
    bitree s,p;
    if(!find(T,k,NULL,p))//查找k是否在树中存在
    {
        s=(bitree)malloc(sizeof(binode));
        s->data=k;
        s->left=s->right=NULL;
        if(p==NULL)//若p==NULL,则说明现在的树是一颗空树,说明s为根节点
        T=s;
        else if(k<p->data)//k<p->data说明s节点应该放在p的左子树 ,反之则放在右子树
        p->left=s;
        else
        p->right=s;
       return 0;
    }
    return 1;
}
void visit(bitree T)
{
 if(T!=NULL)
 {
  printf("%d ",T->data);
 }
}
void midvisit(bitree T)
{
 if(T!=NULL)
 {
  midvisit(T->left);

  visit(T);

  midvisit(T->right);
 }
}
int main()
{
    int n,k,i;
    scanf("%d",&n);
    bitree T;
    T=NULL;
    for(i=0;i<n;i++)
    {
        scanf("%d",&k);
        insert(T,k);
    }
    midvisit(T);
    return 0;
}
时间: 2024-12-22 11:38:12

二叉排序树的建立的相关文章

顺序查找,折半查找,二叉排序树的建立,哈希表的建立

以下四个验证性实验都做. (1)顺序查找验证 (2)折半查找验证 (3)二叉排序树的建立 (4)哈希表的建立 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<string.h> #include<algorithm> using namespace std; class dijiuzhang { public: int a[1

关于二叉排序树树建立并返回根节点

今天做了一道题,发现需要返回根节点,不想多想,就上网搜了一下,发现其中提供的办法都是需要使用父节点,其实并不需要使用父节点. 只需要使用递归函数返回值就可以 struct T{ int x; T *lchild,*rchild; }; T* init(T* &t){//树t的初始状态为t=NULL;e==0说明没有叶子节点 int e; scanf("%d",&e); if(e==0)t=NULL; else { t=new T; t->x=e; init(t-&

二叉排序树的建立、先序/中序/后序遍历、查找

一.定义与性质 定义  二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树. 性质 (1) 二叉排序树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字. (2) 二叉排序树中,各结点关键字是惟一的.  注意:实际应用中,不能保证被查找的数据集中各元素的关键字互不相同,所以可将二叉排序树定义中BST性质(1)里的"小于"改为"大于等于",或将BST

(编程训练)再回首,数据结构——二叉排序树的建立

最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会. 希望这些能提供给初学者一些参考. 在VC++6.0下可运行,当初还写了不少注释. [问题描述] 以输入的一组整数作为关键字的值,构造其对应的二叉排序树,并对给点的值在该二叉排序树上进行查找 [基本要求] ·输入:输入一组关键字(整数)及要查找的值 ·输出:排好序的关键字及查找的结果 样例输入 60 35 69 84 96 13 66 34 21 -1 40 样例输出 13 21 34 35 60 66 69 84

java递归方法建立搜索二叉树,具备查找关键字,插入新节点功能

二叉排序树的定义: 二叉排序树满足以下三个性质(BST性质): <1>若它的左子树非空,则左子树上所有节点的值均小于根节点的值 <2>若它的右子树非空,则右子树上所有节点的值均大于根节点的值 <3>左,右子树本身又各是一棵二叉排序树 根据二叉排序树的BST性质,可以说二叉排序树每个节点上的值(或称关键字)都是唯一的,并且二叉排序树以中序遍历输出的结果必然是一个有序的递增序列. 如下图所示: 用递归方法建立二叉排序树,减少了繁复的比较程序,效率较高.只需要知道每个节点的值

HDU 3999 二叉排序树

The order of a Tree Problem Description The shape of a binary search tree is greatly related to the order of keys we insert. To be precisely:1.  insert a key k to a empty tree, then the tree become a tree with only one node;2.  insert a key k to a no

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

二叉排序树的建立,查找,删除节点的操作. #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

二叉排序树生成删除过程模拟

利用gotoxy语句进行光标移动,利用快速生成二叉树及清屏操作动态显示二叉树生成过程. 界面如下: 代码如下: 1 #include <iostream> 2 #include <stdlib.h> 3 #include <stdio.h> 4 #include <windows.h> 5 using namespace std; 6 typedef int ElemType;//定义二叉树结点值的类型为字符型 7 const int MaxLength=1

二叉排序树的完整实现

在排序中,之前利用大小根堆的方式,保持最小值或者最大值在堆顶端 二叉排序树是保持这棵树一直是有序的 二叉排序树的建立,不同于堆操作只需要对非叶子节点进行处理,保持其大于左右孩子,或者是小于左右孩子,而是需要对每一个点都进行处理,因为他是相对而言更加 严谨的操作 查找一个数据:对于大根堆操作,如果当前值小于根节点,那么这个值在左右分支出现都是由可能得,但是对于BST,如果小那么肯定在左分支,如果大,那么肯定在右分支 删除一个元素:对于堆,一般都是由于排序会删除堆顶元素,那么删除之后由最后一个元素补