二叉树的建立和遍历
来源:互联网 发布:制作卡通人物的软件 编辑:程序博客网 时间:2024/06/06 21:25
一.建立(以‘#’作为空子节点)
1.前序建立,递归思想
注意输入时要将每一个非空节点的子节点写为空才可结束递归,例如输入ABCD#E####
typedef struct BiTNode{struct BiTNode *lchild;struct BiTNode *rchild;char data;} BiTreeNode, *BiTree;BiTree Create(BiTree &S){ char a; cin>>a; if (a== '#')S = NULL;else{S=(BiTNode *)malloc(sizeof(BiTNode));S->data = a;S->lchild = Create(S->lchild);S->rchild = Create(S->rchild);}return S;}
2.由已知的字符串按照满二叉树结构建立二叉树
例如 ABCD##E
显然以前序建立的方法不能满足要求,所以建立采用了以下方法,主要用了一个字符串来储存字符串,然后依次建立,思想也是递归
void Create(BiTree *&s,char a[],int n){ if(n>=strlen(a)||a[n]=='#')s=NULL; else { s=(BiTNode*)malloc(sizeof(BiTNode)); s->data=a[n]; Create(s->lchild,a,2*n+1); Create(s->rchild,a,2*(n+1)); }}
3.数组存储,但因为很容易浪费空间,此处不做赘述
二.遍历
三种:前序,中序,后序
前序:根节点,左子树,右子树
中序:左子树,根节点,右子树
后序:左子树,右子树,根节点
举例
前序:ABDEGCFH 中序:DBGEACHF 后序:DGEBHFCA
代码实现,三种遍历此处都用递归来实现
void Preorder(BiTree *&s)//前序遍历{ if(s) { cout<<s->data<<' '; Preorder(s->lchild); Preorder(s->rchild); }}void Midorder(BiTree *&s)//中序遍历{ if(s) { Midorder(s->lchild); cout<<s->data<<' '; Midorder(s->rchild); }}void Postorder(BiTree *&s)//后序遍历{ if(s) { Postorder(s->lchild); Postorder(s->rchild); cout<<s->data<<' '; }}
0 0
- 二叉树的建立和遍历
- 二叉树 普通的 建立和遍历
- 二叉树的建立和遍历
- 二叉树的建立和遍历
- Tree 二叉树的建立 和遍历
- 二叉树的建立和遍历
- [转]二叉树的建立和遍历
- 二叉树的建立和遍历
- 二叉树的建立和遍历
- 二叉树的建立和遍历
- 二叉树的建立和遍历
- 二叉树的建立和遍历
- 二叉树的建立和遍历
- 二叉树的建立和遍历算法
- 二叉树的建立和遍历
- 二叉树的建立和遍历
- 二叉树的建立和遍历
- 线索二叉树的建立和遍历
- 匿名内部类在开发中当做参数传递
- 对于Eclipse中关于java源码source not found的问题
- python 构造三维全零数组
- python
- android蓝牙传输文件时的文件格式限制及其解决方法
- 二叉树的建立和遍历
- 关于fegin 没进入 fallback 以及Hystrix Dashboard 监控界面没出图形的解决方式
- Git Submodules vs Git Subtrees
- 搜索关键点
- Nginx相关配置
- Nginx/Lighttpd/Apache三大web服务器对比分析
- Linux中参数命令有的是一个横杠有的是两个横杠的区别
- Java中的多线程你只要看这一篇就够了
- 详解闭包