二叉排序树的建立
来源:互联网 发布:iphone桌面软件管理 编辑:程序博客网 时间:2024/06/02 11:57
二叉排序树是一种左子树的值小于根,而右子树的值大于根的的一棵树,通过中序遍历可以得到一个有序的序列= =
#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;}
0 0
- 二叉排序树的建立-java
- 二叉排序树的建立,删除
- 二叉排序树的建立
- 二叉排序树的建立
- 二叉排序树的建立
- 二叉排序树的建立
- 二叉排序树的建立和遍历
- 二叉排序树的建立和遍历
- 二叉排序树的建立和遍历
- 二叉排序树的建立与遍历
- 二叉排序树的建立与查找
- 二叉排序树的建立和遍历
- 二叉排序树的建立与查找
- 建立二叉排序树
- 实验十六 二叉排序树的建立与查找
- 二叉排序树的查找、插入、删除、建立
- BST二叉排序树的建立以及应用
- java中二叉排序树模型的建立
- Uva 705 - Slash Maze
- Uva 10557 XYZZY
- Uva 10004(二分图的判定)
- 右值与左值解析
- Uva(10129)+Uva(10054)
- 二叉排序树的建立
- zoj(1221
- Uva(10305)
- Uva(10034)
- HDU(1087)继续畅通工程
- 10369 - Arctic Network
- prim算法
- C-Lodop工作原理
- 10099 The Tourist Guide