二叉排序树是一种左子树的值小于根,而右子树的值大于根的的一棵树,通过中序遍历可以得到一个有序的序列= =
#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; }
时间: 2024-10-11 17:14:36