首页 > 其他分享 >二叉排序树

二叉排序树

时间:2023-12-30 13:34:01浏览次数:24  
标签:二叉 int NULL Tnode else key 排序 data

  1 #include <iostream>
  2 #include <fstream>
  3 using namespace std;
  4 
  5 struct Tnode
  6 {
  7     int data;
  8     Tnode *lchil,*rchil;
  9 };
 10 
 11 // 向二叉排序树种插入固定值的节点
 12 void insert(Tnode**t,int a)
 13 {
 14     // 如果*t所指为空则进行插入
 15     if(*t == NULL)
 16     {
 17         *t = (Tnode *)malloc(sizeof(Tnode));
 18         (*t)->data = a;
 19         (*t)->lchil = NULL;
 20         (*t)->rchil = NULL;
 21     }
 22     // 进行判断,是否到达要插入的地方
 23     else if((*t)->data > a)
 24     {
 25         // 插入数小于节点数
 26         insert(&(*t)->lchil,a);
 27     }
 28     else if((*t)->data < a)
 29     {
 30         // 插入数大于节点数
 31         insert(&(*t)->rchil,a);
 32     }else 
 33     {
 34         // 插入数等于节点数
 35         printf("该节点已存在,请重新选择其他数插入\n");
 36         return;
 37     }
 38 }
 39 
 40 void deletenode(Tnode**t,int key)
 41 {
 42     if((*t)->data>key)
 43     {
 44         deletenode(&(*t)->lchil,key);
 45     }
 46     else if((*t)->data<key)
 47     {
 48         deletenode(&(*t)->rchil,key);
 49     }
 50     else if((*t)->data==key)
 51     {
 52          (*t)=NULL;
 53     }
 54 }
 55 
 56 int enquiry(Tnode*t,int key)
 57 {
 58     if(t==NULL)
 59     {
 60         return 0;
 61     }
 62     else if(t->data>key)
 63     {
 64         enquiry(t->lchil,key);
 65     }
 66     else if(t->data<key)
 67     {
 68         enquiry(t->rchil,key);
 69     }
 70     else if(t->data==key)
 71     {
 72         return 1;
 73     }
 74 }
 75 
 76 void createBTree(Tnode**t,int nums[],int len)
 77 {
 78   *t = NULL;
 79   for(int i = 0;i < len;i++)
 80   {
 81     insert(t,nums[i]);
 82   } 
 83 }
 84 
 85 void preorder(Tnode*t)
 86 {
 87     if(t==NULL)
 88     {
 89         return;
 90     }
 91     else
 92     {
 93         cout<<t->data<<" ";
 94         preorder(t->lchil);
 95         preorder(t->rchil);
 96     }
 97 }
 98 
 99 int main()
100 {
101     Tnode* t = NULL;
102     int nums[] = {68 ,50 ,60 ,18 ,88 ,12 ,30 ,70 ,48 ,98 ,76 ,58 ,65};
103     int len = 13;
104     createBTree(&t,nums,len);
105     preorder(t);
106     cout<<endl;
107     int i;
108     cin>>i;
109     int result=enquiry(t,i);
110     if(result==0)
111     {
112         cout<<i<<"不存在";
113     }
114     else
115     {
116         deletenode(&t,i);
117         preorder(t);
118     }
119 }

 

标签:二叉,int,NULL,Tnode,else,key,排序,data
From: https://www.cnblogs.com/saucerdish/p/17936279.html

相关文章

  • 数据库查询,按年月排序,计算每月、当年每月有几条数据
    数据库查询,按年月排序,计算每月有几条数据  数据库查询,按年月排序,计算当年每月有几条数据SELECTDATE_FORMAT(inspection_date,'%Y-%m')ASDATETIME,count(*)ASnumFROMgw_inspection_datat1WHEREYEAR(inspection_date)=YEAR(CURDATE())GROUPBY......
  • JAVA 实现 - 二叉树(二)
    二叉搜索树二叉搜索树/二叉查找树/二叉排序树特点:树节点增加key属性,用来比较谁大谁小,key不可以重复对于任意一个树节点,它的key比左子树的key都大,同时也比右子树的key都大/***二叉搜索树*/publicclassBSTree1{publicTreeNoderoot;publicstaticcla......
  • 拓扑排序(TopologicalSort)
    什么是拓扑排序?对一个有向无环图(DirectedAcyclicGraph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(TopologicalOrder)的序列,简称拓扑序列。简单的说,由某......
  • 算法学习Day17二叉树迭迭迭迭代
    Day17迭迭迭迭代ByHQWQF2023/12/28笔记110.平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树_每个节点_的左右两个子树的高度差的绝对值不超过1。示例1:输入:root=[3,9,20,null,null,15,7]输出:true递归法......
  • 数据结构应用之桶排序
    问:有10G的订单数据,希望订单金额(假设都是正整数)进行排序,但我们内存有限,只有几百MB,如何进行排序?答:因内存有限,需要排序的数据量巨大,所以,此时需要外部排序,外部排序采用的是一种分治思想,外部排序最常用的是多路归并排序,即将大数据切成多份一次可以载入内存的小数据,对小数据进行内......
  • 排序
    冒泡排序#include<iostream>usingnamespacestd;intmain(){intarr[6]={0};intlen=sizeof(arr)/sizeof(int);for(inti=0;i<len;i++){cin>>arr[i];}//writeyourcodehere......f......
  • 代码随想录算法训练营第十七天 | 110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和
    一、110.平衡二叉树题目链接:LeetCode110.平衡二叉树学习:思路:后序遍历。实际上是由叶结点到根结点,若有一颗子树不是平衡二叉树,则直接返回给根结点二、257.二叉树的所有路径题目链接:LeetCode257.二叉树的所有路径学习:思路:递归+回溯。因为是线=先遍历根结点,然后遍历左孩......
  • golang对map排序
    golang中map元素是随机无序的,所以在对maprange遍历的时候也是随机的,不像php中是按顺序。所以如果想按顺序取map中的值,可以采用以下方式:import("fmt""sort")funcmain(){m:=make(map[int]string)m[1]="a"m[2]="c"m[0]="b"......
  • 二叉树和哈夫曼树
    Entropy(poj1521)题目大意对字符串分别用ASCII编码(每个字符8b)和哈夫曼编码,输出编码前、后的长度并计算压缩比。解题思路本题不要求求出编码,只需计算长度,考虑记录字符出现频次,用优先队列记录最小的两个频次,直接计算长度。未知的代码#include<bits/stdc++.h>usingnamespa......
  • 代码随想录算法训练营第十六天 |104.二叉树的最大深度,559.n叉树的最大深度,111.二叉树
    一、104.二叉树的最大深度题目链接:LeetCode104.二叉树的最大深度学习:思路:分别求左子树和右子树的高度,返回给根结点,加1之后是根结点的深度,这是后序遍历的思路二、559.n叉树的最大深度题目链接:LeetCode559.N叉树的最大深度学习前:思路:后序遍历。分别所有孩子结点的深......