排序二叉树构建二叉排序树,依次输入56,78,34,45,85,45,36,91,84,78,两个45和78

排序二叉树  时间:2021-09-12  阅读:()

构造一个二叉排序树

看了百度知道之前有人回答 “二叉排序树的插入 如果遇到 相同的节点 怎么办”,你也可以看一下该问题的答案,个人觉得挺有道理的。

根据这个结论,该二叉树这样排 12 / 5 17 / / 3 5 14 20 9 15 / 8 10 或者 12 / 5 17 / / 3 9 14 20 / 5 8 10 15 都可以,看你的要求,只要中序遍历是递增即可。

上述两个中序遍历都是 3 5 5 8 9 10 12 14 15 17 20

最佳排序二叉树在结构上的特点是什么

展开全部 堆排序就是相当于一个排序二叉树,只是它是根节点的优先级别大于任何儿子的优先级别,这样可以每次删除根节点,然后调整整个堆。

program heap; var a:array[1..10000] of integer; n,i:integer; procedure down(i:integer); var x,j:integer; begin x:=a[i]; j:=i*2; while j<=n do begin if a[j]>a[j+1] then j:=j+1; if a[j]begin a[i]:=a[j]; i:=j; j:=i*2; end else break; end; a[i]:=x; end; procedure delete(i); begin n:=n-1; if (n=0)or(i=n+1) then exit else begin a[i]:=a[n+1]; down(i); end; end; begin readln(n); for i:=1 to n do read(a[i]); for i:=n div 2 downto 1 do down(i); for i:=1 to n do begin write(a[1]); delete(1); end; end. 如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快! vaela

用C语言实现二叉排序树

#include<stdlib.h> #include<stdio.h> int counter; /*计数器*/ struct tree /*声明书的结构*/ {struct tree *left; int data; struct tree *right; }; typedef struct tree treenode; /*声明新类型树的结构*/ typedef treenode *b_tree; /*声明二叉树的链表*/ b_tree insert_node(b_tree root,int node) /*插入二叉树的结点*/ {b_tree newnode; b_tree currentnode; b_tree parentnode; newnode=(b_tree)malloc(sizeof(treenode)); /*分配新结点空间*/ newnode->data=node; newnode->right=NULL; newnode->left=NULL; if(root==NULL)return newnode; else{currentnode=root; while(currentnode!=NULL) {parentnode=currentnode; if(currentnode->data>node) currentnode=currentnode->left; else currentnode=currentnode->right; } if(parentnode->data>node) parentnode->left=newnode; else parentnode->right=newnode; } return root; /*返回根结点的指针*/ } b_tree create_btree(int *data, int len) /*建立二叉树*/ { b_tree root=NULL; int i; for(i=0;i<len;i++) root=insert_node(root,data[i]); return root; } void inorder(b_tree point) { /*中序遍历二叉树*/ if(point!=NULL) {inorder(point->left); printf(" %d ",point->data); /*处理结点内容*/ inorder(point->right); } } int tree_search(b_tree root,int key) /*查找二叉树*/ { b_tree pointer; pointer=root; counter=0; while(pointer!=NULL) { counter++; if(pointer->data<key) pointer=pointer->right; else if(pointer->data>key) pointer=pointer->left; else if(pointer->data==key) return 1; } return 0; } void main() { b_tree root=NULL; int m,i,index; /*读入输入值所用的暂存变量*/ float max=0; int nodelist[20]; /*声明存储输入数据之数组*/ int value; printf(" Please input the elements of binary tree(exit for 0): "); index=0; scanf("%d",&value); /*读取输入值放到变量value*/ while(value!=0) {nodelist[index]=value; index=index+1; scanf("%d",&value); } printf("%d",index); root=create_btree(nodelist,index); printf(" the inorder traversal result is :"); inorder(root); printf(" "); for(m=0;m<index;m++) { tree_search(root,nodelist[m]); max+=counter; /*计算查找长度*/ } printf("the average long is: %.2f ",max/index); /*输出average查找长度*/ getch(); }

利用二叉排序树对顺序表进行排序 (1)生成一个顺序表L;(2)对所生成的顺序表L构造二叉排序树(3)利用栈结构

用C或C++语言实现的功能: (1)生成一个顺序表L; (2)对所生成的顺序表L构造二叉排序树 (3)利用栈结构实现中序遍历二叉排序树; (4)中序遍历所构造的二叉排序树将记录由小到大输出。

急!急!求二叉排序树程序

#include <iostream.h> //二叉排序树类的前视定义 template<class Type> class BSTree; //二叉排序树结点类的定义 template<class Type> class BSTreeNode {friend class BSTree <Type>; private: Type data; //数据域(在此为关键字) BSTreeNode <Type> *leftChild, *rightChild; public: BSTreeNode():leftChild(NULL),rightChild (NULL){};//构造函数 BSTreeNode(const Type &d) : data (d), leftChild (NULL),rightChild (NULL) {} ; //构造函数 ~BSTreeNode(){}; //析构函数 }; //二叉排序树的类定义 template <class Type> class BSTree { private: BSTreeNode<Type> * root; //二叉排序树的根指针 void Insert ( const Type & x, BSTreeNode<Type> *&p ); //在p为根的二叉排序树上插入数据元素x void Delete ( const Type & k, BSTreeNode<Type> *&p ); //在p为根的二叉排序树上删除关键字为k的结点 BSTreeNode<Type> * Min(BSTreeNode<Type> *p); BSTreeNode<Type> * Find(const Type &k, BSTreeNode<Type> *p ); //在p为根的二叉排序树上查找关键字为k的结点 void InOrder(BSTreeNode<Type> *r); public: BSTree() : root (NULL) {}//构造函数 Type Find ( const Type &k ) {//查找 BSTreeNode<Type>* p=Find ( k, root ); if(p==NULL){ cout<<"There is not a node that equals "<<k<<endl; return NULL; } return p->data; } void Insert(const Type &x) { Insert ( x, root ); } //插入 void Delete(const Type &k) { Delete ( k, root ); } //删除 void SortDisplay(){InOrder(root);cout<<endl;} }; template <class Type> void BSTree<Type>:: Insert(const Type &x, BSTreeNode<Type> * &p) { //在p为根的二叉排序树插入结点的递归算法 if ( p == NULL ) //空二叉树 p = new BSTreeNode<Type>(x); //创建数据元素x的结点 else if (x<p->data ) //在左子树插入 Insert ( x, p->leftChild ); else if ( x > p->data ) //在右子树插入 Insert ( x, p->rightChild ); else //结点x已存在 { cout << "There has node x" << endl; } } template <class Type> BSTreeNode<Type> * BSTree<Type> :: Find (const Type &k, BSTreeNode<Type> *p) { //在p为根的二叉排序树上进行查找的递归算法 if ( p == NULL ) return NULL; //查找失败 else if ( k<p->data ) //在左子树上递归查找 return Find (k,p->leftChild ); else if (k>p->data ) //在右子树上递归查找 return Find ( k, p->rightChild ); else return p; //相等,查找成功 } template <class Type> void BSTree<Type> :: Delete(const Type &k, BSTreeNode<Type> * &p){ //在p为根的二叉排序树上删除关键字为k的结点 if ( p != NULL ){ BSTreeNode<Type> * temp; if ( k < p->data ) Delete ( k, p->leftChild ); else if ( k > p->data ) Delete ( k, p->rightChild ); else if ( p->leftChild != NULL && p->rightChild != NULL ){ BSTreeNode<Type> * tparent=p; temp=p->rightChild; while(temp->leftChild!=NULL){ tparent=temp; temp=temp->leftChild; } p->data = temp->data; if(tparent==p) Delete ( p->data,tparent->rightChild ); else Delete ( p->data,tparent->leftChild ); } else { temp = p; if ( p->leftChild == NULL ) p = p->rightChild; else if ( p->rightChild == NULL ) p = p->leftChild; delete temp; } } } template <class Type> void BSTree<Type>::InOrder(BSTreeNode<Type>* r){ if(r!=NULL){ InOrder(r->leftChild); cout<<r->data<<" "; InOrder(r->rightChild); } } void main (){ BSTree<int> a; int x; cout<<"输入序列:"<<" "; for(int i=0;;i++){ cin>>x; if(x==-1)break; a.Insert(x); } cout<<endl; cout<<"输出中序遍历序列应为:"; a.SortDisplay(); cout<<endl; cout<<"输入需要删除的整数:"<<" "; int y; cin>>y; cout<<endl; cout<<"查找结果是:"<<a.Find(y)<<endl; cout<<endl; a.Delete(y); cout<<"输出删除后的中序遍历序列应为:"<<" "; a.SortDisplay(); }

构建二叉排序树,依次输入56,78,34,45,85,45,36,91,84,78,两个45和78

题目中应该几乎没有这种情况吧,像这一题,可以先试着把后一个45插到原45的左子树下(其实右子树下也是一样的)然后按照平衡二叉树的规则去做变换,而结果的78由于本题里前一个78的右子树上已经有了节点了,也只能插在做子树上面。

ps:以上都是个人见解,因为实际中并未见过此例~

易探云美国云服务器评测,主机低至33元/月,336元/年

美国服务器哪家平台好?美国服务器无需备案,即开即用,上线快。美国服务器多数带防御,且有时候项目运营的时候,防御能力是用户考虑的重点,特别是网站容易受到攻击的行业。现在有那么多美国一年服务器,哪家的美国云服务器好呢?美国服务器用哪家好?这里推荐易探云,有美国BGP、美国CN2、美国高防、美国GIA等云服务器,线路优化的不错。易探云刚好就是做香港及美国云服务器的主要商家之一,我们来看一下易探云美国云服...

欧路云:美国200G高防云-10元/月,香港云-15元/月,加拿大480G高防云-23元/月

欧路云 主要运行弹性云服务器,可自由定制配置,可选加拿大的480G超高防系列,也可以选择美国(200G高防)系列,也有速度直逼内地的香港CN2系列。所有配置都可以在下单的时候自行根据项目 需求来定制自由升级降级 (降级按天数配置费用 退款回预存款)。由专业人员提供一系列的技术支持!官方网站:https://www.oulucloud.com/云服务器(主机测评专属优惠)全场8折 优惠码:zhuji...

盘点AoYoZhuJi傲游主机商8个数据中心常见方案及八折优惠

傲游主机商我们可能很多人并不陌生,实际上这个商家早年也就是个人主机商,传说是有几个个人投资创办的,不过能坚持到现在也算不错,毕竟有早年的用户积累正常情况上还是能延续的。如果是新服务商这几年确实不是特别容易,问到几个老牌的个人服务商很多都是早年的用户积累客户群。傲游主机目前有提供XEN和KVM架构的云服务器,不少还是亚洲CN2优化节点,目前数据中心包括中国香港、韩国、德国、荷兰和美国等多个地区的CN...

排序二叉树为你推荐
文件损坏电脑老是显示文件损坏,请运行chkdsk工具,怎么办?支付宝账单查询支付宝怎么查询交易记录招行信用卡还款我是招行的信用卡!该怎么还款soap是什么意思捡肥皂是什么意思啊?无恶意,就好奇乐辞乐组词有哪些里程碑2里程碑2怎么样科学计算器说明书科学计算机具体怎么用?趋势防毒如何给服务器安装趋势防毒网络版软件超市商品价格为什么超市的商品价格比便利店便宜安全网络攻防大赛CTF是什么意思
网站域名注册 独立ip虚拟主机 备案未注册域名 新网域名解析 阿里云邮箱登陆首页 photonvps 回程路由 seednet 流量计费 web服务器安全 中国联通宽带测速 国内空间 magento主机 server2008 alertpay 大硬盘补丁 电脑显示屏不亮但是主机已开机 云主机 次时代主机 suspended翻译 更多