数据结构:二叉树
来源:互联网 发布:淘宝店铺装修广告图片 编辑:程序博客网 时间:2024/06/14 02:20
之前自己看书去写了个二叉树,现在看来写的简直误人子弟。。。所以删了,决定重新写一篇。
二叉树:关于二叉树的学习过程中我的感悟最深的就是你要学好二叉树,那么前提你必须把递归掌握熟练,所以说递归对于二叉树来说至关重要。
关于二叉树的结点结构,需要一个数据域,两个指针域
typedef struct BtNode
{
BtNode *leftchild;
BtNode *rightchild;
ElemType data;
}BtNode, * BinaryTree;
二叉树的结点的构造初始化和释放直接参照链表的malloc,free就好了
这里给出一个先序构造二叉树的方式,但是注意的是要提前设置结点终结标志
typedef char ElemType;
#define END '#'
然后用字符串来表示例如str="AB##C##"构造出来为
A
B C
递归构造
BtNode * Create(ElemType *&str)
{
BtNode *s = NULL;
if(*str != END)
{
s = _Buynode();
s->data = *str;
s->leftchild = Create(++str);
s->rightchild = Create(++str);
}
return s;
}
BtNode *CreateTree(ElemType *str)
{
if(str == NULL)
return NULL;
else
return Create(str);
}
再给出一个检验的输出函数(先序输出)
void PreOrder(BtNode *p)//x先序遍历
{
if(p != NULL)
{
cout<<p->data<<" ";
PreOrder(p->leftchild);
PreOrder(p->rightchild);
}
}
这样基本构造就完成了,关于二叉树还有许多许多的函数需要我们去实现,太多了我就不一一写了
二叉树是由三个基本单元组成:根节点,左子树,和右子树
L表示遍历左子树
D表示访问根节点
R表示遍历右子树
我们限定先左后右,就只剩下了三种情况
先(根)序遍历:
(1)访问根节点
(2)先序遍历左子树
(3)先序遍历右子树
中(根)序遍历:
(1)中序遍历左子树
(2)访问根结点
(3)中序遍历右子树
后(根)序遍历:
(1)后序遍历左子树
(2)后序遍历右子树
(3)访问根结点
- 数据结构-树-二叉树
- 数据结构::树,二叉树
- 数据结构-二叉树
- 二叉树的数据结构
- 数据结构-二叉树算法
- java数据结构:二叉树
- 数据结构---二叉树
- 数据结构(C++)--二叉树
- JAVA 数据结构 二叉树
- 数据结构-二叉树 问题
- 转贴:数据结构:二叉树
- 二叉树(数据结构 c++)
- 数据结构-二叉树操作
- java数据结构----二叉树
- 数据结构二叉树
- 数据结构中的二叉树
- 数据结构--二叉树
- 数据结构二叉搜索树
- Pro JPA2读书笔记系列(十三)-第十一章(高级主题)-缓存-干货
- Javadoc中"e.g."和"i.e."的区别
- 【动态规划】爬楼梯问题
- linux创建用户、设置密码、修改用户、删除用户:
- 帝国cms 常用标签
- 数据结构:二叉树
- keytool用法
- 垃圾回收算法历史
- 前端开发者不得不知的ES6十大特性
- Redis 学习笔记(十四)Redis存储结构优化
- AppPlugin:Unsupported
- HDU 1166 敌兵布阵 树状数组 区间求和
- hadoop archive 详解《转载》
- 第5课 Go的map