05_ 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历
来源:互联网 发布:凤凰网域名注册 编辑:程序博客网 时间:2024/05/14 12:12
1. 题目描述:
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。输入:
输入第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。
输出:
可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
每种遍历结果输出一行。每行最后一个数据之后有一个空格。
样例输入:
5
1 6 5 9 8
样例输出:
1 6 5 9 8
1 5 6 8 9
5 8 9 6 1
提示:
输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。
#include <iostream> using namespace std; #include <stdio.h> #include <stdlib.h> typedef struct BiTNode { int value; struct BiTNode *lchild,*rchild; }*BiTree; bool LT(int a,int b) //LessThan小于 { if(a<b) return true; else return false; } /* 在根指针root所指向的二叉排序树中递归地查找其关键字等于data的数据元素,若查找成功,则指针p指向该数据元素结点,并返回true, 否则指针p指向查找路径上访问的最后一个结点并返回false指针,指针f指向root的双亲,其初始调用值NULL */ bool SearchBST(BiTree root,int data,BiTree f,BiTree &p) { if(!root) { p=f; return false; } else if(data==root->value) { p=root; return true; } else if(data<root->value) return SearchBST(root->lchild,data,root,p); else if(data>root->value) return SearchBST(root->rchild,data,root,p); } //当二叉排序树root中不存在关键字等于data的数据元素时,插入data,此函数调用频率高,所以设置成inlineinline void InsertBST(BiTree &root,int data) //root为传引用指针 { BiTree p,s; if(!SearchBST(root,data,NULL,p)) //查找不成功 { s=(struct BiTNode *)malloc(sizeof(BiTNode)); s->value=data; s->lchild=s->rchild=NULL; if(p==NULL) //二叉排序树为空的时候,被插入结点*s为新的根结点 root=s; else if(LT(data,p->value)) //被插结点*s为左孩子 p->lchild=s; else //被插结点*s为右孩子 p->rchild=s; } return ; } void PreOrderTraverse(BiTree root) //先序遍历 { if(root) { printf("%d ",root->value); PreOrderTraverse(root->lchild); PreOrderTraverse(root->rchild); } } void InOrderTraverse(BiTree root) //中序遍历 { if(root) { InOrderTraverse(root->lchild); printf("%d ",root->value); InOrderTraverse(root->rchild); } } void PostOrderTraverse(BiTree root) //后序遍历 { if(root) { PostOrderTraverse(root->lchild); PostOrderTraverse(root->rchild); printf("%d ",root->value); } } void DeleteBST(BiTree root) //释放二叉树占用的内存空间{ if(root) { DeleteBST(root->lchild); //释放左子树 DeleteBST(root->rchild); //释放右子树 free(root); //释放根结点 } } int main(void) { int i,a[101],n; BiTree root; while(scanf("%d",&n)!=EOF) { root=NULL; for(i=1;i<=n;i++) { scanf("%d",&a[i]); InsertBST(root,a[i]); } PreOrderTraverse(root); printf("\n"); InOrderTraverse(root); printf("\n"); PostOrderTraverse(root); printf("\n"); DeleteBST(root); } return 0; }
- 05_ 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历
- 构造排序二叉树并输出前序遍历、中序遍历、后序遍历
- 20170816_二叉树的建立+前序遍历+中序遍历+后序遍历+层序遍历
- 由前序和中序遍历建立二叉树并后序遍历输出二叉树
- 重建二叉树——输入前序、中序遍历构建二叉树并输出后序遍历
- 二叉排序数(创建,插入,删除,查找及前序、中序、后序遍历)
- C++数据结构--二叉树的建立,前序遍历,中序遍历和后序遍历
- 二叉树的建立,前序遍历,中序遍历,后序遍历
- 二叉树建立,前序遍历,中序遍历,后序遍历 思路
- 二叉树的建立以及前序遍历、中序遍历、后序遍历
- 建立排序二叉树并中序遍历
- 根据前序遍历、中序遍历构建二叉树,并后序遍历输出。
- 通过前序(后序), 中序遍历建立二叉树 求解层次遍历
- 【原创】二叉树的建立与遍历(前序遍历、中序遍历、后序遍历)
- 二叉链表的建立和遍历 完整的前,中,后和层序建立和遍历
- 根据前序/后序/层序+中序遍历序列建立二叉树
- 二叉树建立,递归,非递归,前序,中序,后序遍历
- C++二叉树的建立、前序、中序、后序遍历
- 单点登录(二)cas服务端介绍
- 数字信号处理讨论群 群 号:232099818
- java环境变量配置
- main 函数是怎样运行的
- REVERSE关键字之REVERSE索引
- 05_ 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历
- 开源力量公开课第三十四期-《微软+开源:如何使用微软公有云Azure上的开源软件》
- nodejs 入门总结
- Mfg tool WINCE下载
- 将博客搬至CSDN
- C++11-正则表达式笔记
- IOS开发-UIWebView网页视图
- 第三方应用市场
- 【Linux基础】制作qte-4.7.0带tslib的根文件系统 [复制链接]