首页 > 代码库 > 排序二叉树的实现
排序二叉树的实现
在计算机科学中,二叉树是一种重要的非线性的数据结构。每个结点的度均小于等于2,通常子树称为左子树和右子树。而排序二叉树是二叉树中的一种,其满足:1. 如左子树不为空,那么左子树上的结点的值都小于其根上的值;2. 如右子树不为空,那么右子树上的结点的值都大于其根上的值; 3. 其子树也是一个排序二叉树。
下面用递归的方式来插入一个结点来满足上述的要求:
typedef struct Node { int data; Node *lchild; Node *rchild; }Node,*LNode;
void _insert1(LNode &T1,int key) { if(T1==NULL) { T1=new Node; T1->data=http://www.mamicode.com/key;>首先定义了一个二叉树结点的结构体,然后采用递归的方式创建了满足上述排序二叉树要求的插入函数;下面定义中序遍历函数,使得排序二叉树上的数据元素按照升序的方式输出打印:
void inOrder(LNode T1) { if(T1!=NULL) { inOrder(T1->lchild); cout<<T1->data<<" "; inOrder(T1->rchild); } }然后定义一个查找函数,以递归的方式实现,若查找的元素比根节点的元素大则在右子树中继续查找,反之在左子树中继续查找:LNode _find(LNode T1,int key) { if(T1==NULL) { cout<<"No such element"; return NULL; } if(T1->data=http://www.mamicode.com/=key) return T1;>最后定义一个计算排序二叉树的深度的函数:同样适用递归的方式实现:int _deep(LNode T1) { int r=0,l=0; if(T1==NULL) return 0; else { r=_deep(T1->rchild); l=_deep(T1->lchild); } if(r>l) return r+1; else return l+1; }测试代码如下:void main() { LNode L1=NULL; int x1=0; while(cin>>x1) { _insert1(L1,x1); } inOrder(L1); cout<<endl<<_deep(L1)<<endl; LNode L2=_find(L1,3); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。