博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的简单实现即递归遍历
阅读量:6254 次
发布时间:2019-06-22

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

#include
#include
#include
using namespace std;#define ElemType char#define MaxSize 100typedef struct node{ ElemType data; struct node *lchild; struct node *rchild;}BTNode;void CreateBTree1(BTNode *&b,char *str)//由数组直接建立二叉树{ BTNode *St[MaxSize];//St作为顺序栈 BTNode *p; int top = -1;//top为栈顶指针 int j = 0; int k ; char ch; ch = str[j]; b = NULL;//初始二叉链为空 while(ch != '\0')//循环str { switch(ch) { case '(': top++; St[top] = p; k = 1; break;//开始处理左孩子结点, case ')': top--; break;//栈顶结点的子树处理完毕 case ',': k = 2; break;//开始处理右孩子结点 default://创立一个结点,p指向它 p = (BTNode*)malloc(sizeof(BTNode)); p->data = ch;//存放结点值 p->lchild = p->rchild = NULL;//左右孩子为空 if(b == NULL)//若尚未建立头结点 { b = p;//p所指即为根结点 } else { switch(k) { case 1: St[top]->lchild = p; break;//新建结点为根结点左孩子 case 2: St[top]->rchild = p; break;//新建结点为根结点右孩子 } } } j++; ch = str[j]; }}void CreateBTree2(BTNode *&b)//手动输入二叉树{ b = NULL; char ch; ch = getchar(); if(ch == '#') { b = NULL; } else { b = (BTNode *)malloc(sizeof(BTNode)); b->data = ch; CreateBTree2(b->lchild); CreateBTree2(b->rchild); }}void DispLeaf(BTNode *b)//Print All Leaf{ if(b != NULL) { if(b->lchild == NULL && b->rchild == NULL) { cout<
data; } DispLeaf(b->lchild);//lchild leaf DispLeaf(b->rchild);//rhcild leaf }}BTNode* FindNode(BTNode *b,ElemType x)//return a Node{ BTNode *p; if(b == NULL) { return NULL; } else if(b->data == x) { return b; } else { p = FindNode(b->lchild,x); if(p != NULL) { return p; } else { return FindNode(b->rchild,x); } }}BTNode* LchildNode(BTNode *p)//return p lchild{ return p->lchild;}BTNode* RchildNode(BTNode *p)//return p rchild{ return p->rchild;}int BTHeight(BTNode *b)//return BTheigh{ int lchildh,rchildh; if(b == NULL) { return (0); } else { lchildh = BTHeight(b->lchild); rchildh = BTHeight(b->rchild); return (lchildh >rchildh) ? (lchildh + 1): (rchildh + 1); }}int Level(BTNode *b,ElemType x,int h)//return Level{ int level; if(b == NULL) { return (0); } else if(b->data == x) { return h; } else { level = Level(b->lchild,x,h+1); if(level != 0) { return level; } else { return (Level(b->rchild,x,h+1)); } }}void DispBTree(BTNode *b){ if(b != NULL) { cout<<" "<
data; if(b->lchild != NULL || b->rchild != NULL) { cout<<"(";//有孩子结点才输出( DispBTree(b->lchild);//扫描左子树 if(b->rchild != NULL)//有右子树才输出, { cout<<","; } DispBTree(b->rchild);//递归处理右子树 cout<<")";//有孩子结点才输出 } }}void PreOrder(BTNode *b){ if(b != NULL) { cout<<" "<
data; PreOrder(b->lchild); PreOrder(b->rchild); }}void InOrder(BTNode *b){ if(b != NULL) { InOrder(b->lchild); cout<<" "<
data; InOrder(b->rchild); }} void PostOrder(BTNode *b){ if(b != NULL) { PostOrder(b->lchild); PostOrder(b->rchild); cout<<" "<
data; }}void DestoryBTree(BTNode *&b){ if(b != NULL) { DestoryBTree(b->lchild); DestoryBTree(b->rchild); free(b); }}int main(){ //~~~~~~~~~~~~~~Create1 BTNode *b,*p,*lp,*rp; cout<<"BTree"<
data; } else { cout<<"No lchild !"<
data; } else { cout<<"NO rchild !"<
"; PreOrder(b); cout<
"; InOrder(b); cout<
"; PostOrder(b); cout<
"; DispLeaf(b); cout<
"; PreOrder(b2); cout<
"; InOrder(b2); cout<
"; PostOrder(b2); cout<
"<

  

这是运行后的结果,注意Create1 和Create2 创建二叉树的区别。。

转载于:https://www.cnblogs.com/ygsworld/p/9973347.html

你可能感兴趣的文章
练习PYTHON之GEVENT
查看>>
Web持久化存储Web SQL、Local Storage、Cookies(常用)
查看>>
Libsvm和Liblinear的使用经验谈
查看>>
php生成curl命令行
查看>>
PHP中的数据库四、mongodb
查看>>
品读吴军"之"系列
查看>>
Android NumberPicker 修改分割线颜色和高度及字体颜色大小
查看>>
树莓派键盘布局修正
查看>>
Android之Http通信——3.Android HTTP请求方式:HttpURLConnection
查看>>
C++智能指针--weak_ptr
查看>>
HDURevenge of Segment Tree(第二长的递增子序列)
查看>>
Json数组操作小记 及 JSON对象和字符串之间的相互转换
查看>>
常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服...
查看>>
安装 directx sdk 出现 S1023 解决
查看>>
Git-命令行-删除本地和远程分支
查看>>
SUPERSOCKET.CLIENTENGINE 简单使用
查看>>
第 7 章 异步输入输出
查看>>
ASP.NET应用使用Nginx做负载均衡遇到的一个问题
查看>>
Chapter 5 Blood Type——5
查看>>
在JSON中遇到的一些坑
查看>>