博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的基本操作
阅读量:4488 次
发布时间:2019-06-08

本文共 3044 字,大约阅读时间需要 10 分钟。

说明

二叉树的基本操作: 递归建立和非递归建立、遍历二叉树、求树高。

C程序实现

#include "iostream"  #include "malloc.h"  using namespace std;  #define Maxsize 1024  typedef char datatype;  typedef struct node  {      datatype data;      struct node*lchild,*rchild;  }bitree;  bitree*CreatTree()//非递归的方式建立完全二叉树  {      cout<<"连续输入字符建立完全二叉树,并以‘#’结束"<
data=ch; s->lchild=NULL; s->rchild=NULL; rear++; Q[rear]=s; if (rear==1) root=s; else { if(s&&Q[front]) { if(rear%2==0) Q[front]->lchild=s; else Q[front]->rchild=s; } if(rear%2==1) front++; } } return root; } bitree *CreatTree2(int i,int n)//定义的方式建立完全二叉树 //不够通用,仅提供一种参考 { bitree *root; root=(bitree*)malloc(sizeof(bitree)); root->data=i; if(2*i<=n) //若2*i<=n,那么tree的左孩子为tree[2*i]; root->lchild=CreatTree2(2*i,n); else root->lchild=NULL; if(2*i+1<=n)//若2*i+1<=n,那么tree的右孩子为tree[2*i+1]; root ->rchild=CreatTree2(2*i+1,n); else root->rchild=NULL; return root; } void PreOrder(bitree*p)//前序递归遍历 { if (p!=NULL) { cout<<"->"<
data; PreOrder(p->lchild); PreOrder(p->rchild); } } void InOrder(bitree*p)//中序递归遍历 { if (p!=NULL) { InOrder(p->lchild); cout<<"->"<
data; InOrder(p->rchild); } } void NinOrder(bitree*p)//非递归的中序遍历,其他两种非递归遍历诸君自己实现 { bitree*stack[Maxsize]; bitree*s=p; int top=-1; while (top!=-1||s!=NULL) { while (s!=NULL) { if (top==Maxsize-1) { cout<<"OVERFLOW"; return; } else { top++; stack[top]=s; s=s->lchild; } } s=stack[top]; top--; cout<
data; s=s->rchild; } } void PostOrder(bitree*p)//后序递归遍历 { if (p!=NULL) { PostOrder(p->lchild); PostOrder(p->rchild); cout<<"->"<
data; } } void Layer(bitree*p)//用队列实现广度优先遍历 { bitree*Q[Maxsize]; bitree*s; int rear=1,front=0; Q[rear]=p; while (front
"<
data; if (s->lchild!=NULL) { rear++; Q[rear]=s->lchild; } if (s->rchild!=NULL) { rear++; Q[rear]=s->rchild; } } } int CountLeaf(bitree*p)//计算叶子节点数目 { if(!p) return 0; else if(!p->lchild&&!p->rchild) return 1; else return CountLeaf(p->lchild)+CountLeaf(p->rchild); } int Height(bitree*p)//计算数的高度 { int lc,rc; if(p==NULL) return 0; lc=Height(p->lchild)+1; rc=Height(p->rchild)+1; return lc>rc?lc:rc; } int main() { bitree*p; int leaf,height; p=CreatTree(); cout<<"深度优先遍历如下所示"<
<

转载于:https://www.cnblogs.com/actanble/p/6713433.html

你可能感兴趣的文章
ShellShock 攻击实验
查看>>
BAT及各大互联网公司前端笔试面试题--Html,Css篇
查看>>
Linux下的时间戳
查看>>
xpath的学习
查看>>
kvm系列之四:热添加技术
查看>>
grep命令
查看>>
powershell的stable和preview版本
查看>>
DateTime
查看>>
火狐浏览器设置bypass
查看>>
XMLHttpRequest 对象
查看>>
C语言中的循环结构与选择结构
查看>>
加锁解锁PHP实现 -转载
查看>>
java Object类的公共方法
查看>>
floodlight make the VMs can not getDHCP IP address
查看>>
利用unittest+ddt进行接口测试(二):使用yaml文件管理测试数据
查看>>
11 个创新的网站滑动效果设计案例展示
查看>>
BZOJ4675
查看>>
闭包、循环setTimeout、立即执行函数
查看>>
linux之cut用法
查看>>
DataNucleus之JDO操作演示样例
查看>>