二叉排序数
2016-03-07 18:53
218 查看
#include<iostream> #include<cstdio> using namespace std; typedef struct BiNode{ int data; struct BiNode *left; struct BiNode *right; }BiTree,*Bilink; //前序遍历 void PreOrder(Bilink bn){ if(bn) { cout<<bn->data<<" "; PreOrder(bn->left); PreOrder(bn->right); //cout<<endl; } } //中序遍历 void MidOrder(Bilink bn){ if(bn) { MidOrder(bn->left); cout<<bn->data<<" "; MidOrder(bn->right); //cout<<endl; } } //后序遍历 void PostOrder(Bilink bn){ if(bn) { PostOrder(bn->left); PostOrder(bn->right); cout<<bn->data<<" "; //cout<<endl; } } //二叉树撤销 void deleteBT(Bilink bn){ if(bn) { deleteBT(bn->left); deleteBT(bn->right); free(bn); } } //建立二叉树 void buildBianryTree(Bilink &bn,int elem[],int length){ Bilink pre,p;//pre为前节点,p为当前节点 int leftOrright;//0表示左孩子,1表示右孩子 int success; bn = new BiTree;//生成头结点 bn->data = elem[0];//初始化 bn->right = NULL; bn->left = NULL; for(int i = 1;i<length;i++)//遍历插入 { success = 0; pre = NULL;//保存当前节点 p = bn; while(p){ pre = p; if(p->data==elem[i]) { success = 1; break;//说明该值的节点不用再插入 }else if(p->data<elem[i]){ //此时新节点应插入到右节点上 leftOrright = 1; p = p->right; }else { leftOrright = 0; p = p->left; } } if(!success) { p = new BiTree;//创建新节点 p->data = elem[i]; p->left = NULL; p->right = NULL; if(leftOrright==0)//新插入的节点作为左孩子 pre->left = p; else if(leftOrright==1)//新插入的节点作为右孩子 pre->right = p; } } } int main(){ Bilink head; int elem[110]; int n; while(scanf("%d",&n)!=EOF){ for(int i = 0;i<n;i++) scanf("%d",&elem[i]); buildBianryTree(head,elem,n); PreOrder(head); cout<<endl; MidOrder(head); cout<<endl; PostOrder(head); cout<<endl; } }
相关文章推荐
- Web之页面关联关系之forward&redirect笔记
- 算法训练 字符串的展开
- 保存matlab command window缓冲区中的日志
- Scala面向对象彻底精通及Spark源码阅读
- Java源码阅读之StringBuffer
- 关于order by注入利用rand(true)的一个疑问
- android studio在小米2s 真机5.0.1系统上出现INSTALL_FAILED_NO_MATCHING_ABIS
- SpringbootUnable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFact
- [golang note] 类型系统
- jQuery和js 获取父级元素、子级元素、兄弟元素方法
- TCP/IP 路由 卷一 习题 ospf
- JAVA与AS2制作一个2D多人游戏(3)
- css一些零零散散的问题
- .NET平台
- 方法重载和继承
- YTU 2425: C语言习题 输出月份
- 美团Android DEX自动拆包及动态加载简介
- Android应用性能优化
- c语言技巧
- [spring security] spring security 4 基础Demo