二叉排序树BST 静态实现
2018-03-10 12:41
211 查看
5 1 6 5 9 8 /* 二叉排序树的建立 */ #include<stdio.h> #include<string.h> struct Node{ Node* lchild; Node* rchild; int data; }Tree[101]; int loc; Node *creat(){ Tree[loc].lchild=Tree[loc].rchild=NULL; return &Tree[loc++]; } void PreOrder(Node *T){ printf("%d ",T->data); if(T->lchild) PreOrder(T->lchild); if(T->rchild) PreOrder(T->rchild); } void InOrder(Node *T){ if(T->lchild) InOrder(T->lchild); printf("%d ",T->data); if(T->rchild) InOrder(T->rchild); } void PostOrder(Node *T){ if(T->lchild) PostOrder(T->lchild); if(T->rchild) PostOrder(T->rchild); printf("%d ",T->data); } //插入方法,按大小顺序插入左右分支,走到底时建立新节点 Node *Insert(Node *T,int x){//返回创建的节点 if(T==NULL){//走到底了 T=creat(); T->data=x; return T;//用作返回的时候做孩子 } else if(x<T->data) T->lchild=Insert(T->lchild,x); else if(x>T->data) T->rchild=Insert(T->rchild,x); return T;//最后一次返回的是传进来的跟节点 } Node* MyInsert(Node *T,int x){//插入后要返回根指针 Node* temp=T; while(T!=NULL){ if(x<T->data) T=T->lchild; else if(x>T->data) T=T->rchild; else return temp;//相等时直接结束 } T=creat(); T->data=x; if(temp==NULL) return T; else return temp; } int main(){ int n,x; while(scanf("%d",&n)!=EOF){ Node *T=NULL; for(int i=0;i<n;i++){ scanf("%d",&x); T=MyInsert(T,x);//保证对树修改的同时保留根节点指针 } PreOrder(T); printf("\n"); InOrder(T); printf("\n"); PostOrder(T); printf("\n"); } return 0; }
相关文章推荐
- 【排序】静态表格实现排序功能
- 静态顺序表的实现及相关操作源代码(插入,删除,排序,逆置,超详细)
- C语言实现静态顺序表的功能(增,删,查,改,以及排序)
- Java数据结构----树--二叉查找(搜索或排序)树BST
- Java实现简单数据结构之二叉树结构排序 binary tree
- Pku acm 2371 Questions and answers 排序算法解题报告(三)----二叉查找数(BST)排序
- js 静态HTML表格排序功能实现
- GRIDVIEW排序 动态实现和静态实现
- 十一、二叉查找(排序)树(符号表的实现)
- BST && TREAP 实现简单排序
- leetcode 将已排序的 数组/链表 转换为二叉搜索树(BST),Python实现
- 静态顺序表的实现(增删查改排序)
- GRIDVIEW排序 动态实现和静态实现
- GRIDVIEW排序 动态实现和静态实现
- 二叉查找(排序)树的分析与实现
- js 静态HTML表格排序功能实现
- GRIDVIEW排序 动态实现和静态实现
- (算法)排序—冒泡排序法Java实现
- java实现排序算法之堆排序
- java实现快速排序、插入排序、选择排序、冒泡排序算法