zoukankan      html  css  js  c++  java
  • 二叉排序树的建立

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

    #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;
    }
  • 相关阅读:
    导入导出excel
    sql里的常用方法
    mybatis_plus
    Shiro框架从入门到实战
    PHP面向对象程序设计(视频学习)
    Java爬虫技术快速入门
    微信公众号开发客服消息与模板消息开发(视频java版)
    微信小程序从基础到实战完整视频教程
    微信扫码支付视频课程(Java版)
    支付宝web商城支付(视频java版)
  • 原文地址:https://www.cnblogs.com/NaCl/p/4811501.html
Copyright © 2011-2022 走看看