问题 L: 二叉查找树(Ⅰ)-创建和遍历
来源:互联网 发布:淘宝双11整点抢购技巧 编辑:程序博客网 时间:2024/06/05 05:59
前言必读!http://blog.csdn.net/hnust_v/article/details/51747743
问题 L: 二叉查找树(Ⅰ)-创建和遍历
时间限制: 1 Sec 内存限制: 128 MB
提交: 415 解决: 91
[提交][状态][讨论版]
题目描述
二叉查找树(Binary Search Tree),又称为二叉排序树,它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉查找树。 本任务是在空树的基础上,依次插入一些关键字,然后遍历该树。要求树中不能有重复关键字。输入由多组数据 组成。每组数据由两行组成。第一行是待插入关键字的数目n(1<=n<=100)。第2行是n个空格分开的正整数,值不超过100。输出 对于每一组数据,输出两行。第一行是该BST的中序遍历,第二行是该BST的后序遍历,各关键字用空格分隔。样例输入64 2 1 5 3 6样例输出1 2 3 4 5 61 3 2 6 5 4提示
递归建树,递归打印,任何一本数据结构书都有伪代码,这里不贴了
#include <bits/stdc++.h>using namespace std;typedef struct LNode{ LNode *Lchild,*Rchild; int info,flor;}LNode,*Fin;LNode Q[10000];int ERRZ[10000],ERRH[10000];int Z,H,Count;void PrintZ(Fin P,int n){ if(P==NULL) return; PrintZ(P->Lchild,n); printf("%d%c",P->info,++Z!=n?' ':'\n'); PrintZ(P->Rchild,n);}void PrintH(Fin P,int n){ if(P==NULL) return; PrintH(P->Lchild,n); PrintH(P->Rchild,n); printf("%d%c",P->info,++H!=n?' ':'\n');}void Add(int a,int FLOR,LNode *P,LNode *Q){ // if(P.Lchild) printf("P==%d (*P.Lchild).info==%d\n",P.info,(*P.Lchild).info); Q->flor=FLOR; if(P->info > a) { if(P->Lchild != NULL) Add(a,FLOR+1,P->Lchild,Q); else {P->Lchild = Q;return;} } else if(P->info < a) { if(P->Rchild != NULL) Add(a,FLOR+1,P->Rchild,Q); else {P->Rchild = Q;return;} } else if(P->info == a) {Count++;return;} return;}void Creat(int n){ Fin Root=NULL; int a;LNode P;Count=0; scanf("%d",&a); P.info=a;P.flor=0;P.Lchild=P.Rchild=NULL;//Print(&P); Root = &P; for(int i=2,a;i<=n;i++) { scanf("%d",&a); Q[i].info=a;Q[i].Lchild=Q[i].Rchild=NULL; // P = *Root; //printf("i==%d_ a==%d_______________________________\n",i,a); // printf("P.info==%d\n",P.info); //if(P.Lchild) printf("P==%d (*P.Lchild).info==%d\n",P.info,(*P.Lchild).info); Add(a,1,&P,&Q[i]); //Print(Root); } Z=0;H=0;PrintZ(Root,n-Count);PrintH(Root,n-Count);}int main(){ // freopen("F:\\test.txt","r",stdin); // freopen("F:\\tsst.txt","w",stdout); int n;while(cin>>n) Creat(n); return 0;}
0 0
- 问题 L: 二叉查找树(Ⅰ)-创建和遍历
- 二叉查找树的创建和遍历
- 二叉查找树的简单创建和3种遍历
- 二叉查找树之创建,遍历,删除
- 二叉查找树的创建及遍历
- 二叉树的递归创建,以及二叉查找树查找的建立 和遍历查找的比较
- 创建和遍历二叉树
- 二叉树创建和遍历
- 二叉树创建和遍历
- 二叉树-创建和遍历
- 二叉树的遍历和查找
- Java 二叉查找(排序)树 创建 以及中序和层序遍历
- Java 二叉查找(排序)树 创建 以及中序和层序遍历
- PAT-1135 Is It A Red-Black Tree(二叉查找树的创建和遍历)
- 查找--遍历二叉树
- 遍历二叉查找树
- 二叉树的遍历和二叉查找树
- java数据结构二叉树的遍历和二叉查找树
- HDU1312
- Android如何查看应用签名信息
- jquery延时载入动画焦点图- 有点类似视差动画
- C#表达式和运算符详解
- 面试之我见
- 问题 L: 二叉查找树(Ⅰ)-创建和遍历
- Android SwipeRefreshLayout 官方下拉刷新控件介绍
- 二叉树的深度
- 【智力题】称重问题
- 红黑树
- Hash表分析以及Java实现
- poj-3258-River Hopscotch
- 2016-06-23-课程设计日志
- 《java数据结构与算法》笔记-CH4-8栈结构实现后缀表达式计算结果