【ShancoLove】带你看数据结构——第九课:二叉树的存储与遍历
2015-10-26 20:20
405 查看
第一种:
依次编号,凡是空着的地方,也标号,将有数字的填入,反之空着
则,父节点若为n,则左子树为2n,右子树为2n+1,通过下标之间的函数关系来判断层数,但你可以想像,如果空的数据比较多,则数组的方法并不适用
接下来说一说结构体的结构
struct tree
{
int left;
int data;
int right;
};
typedef struct tree treenode;
treenode b_tree[15];
最后一种谈谈链式表
struct tree
{
struct tree *left;
int data;
struct tree *right;
}
typedef struct tree treenode;
treenode *b_tree;
在遍历的方法上根据data的位置可以分为前序中序和后序
前序DLR 中序LDR 后序LRD
此处提供前序遍历方法
void preorder(b_tree point)
{
if(point!=NULL)
{
printf("%d",point->data);
preorder(point->left);
preorder(point->right);
}
}
很简单,能看得出来使用的是递归,这是个非常好的方法,如果实在理解不了,强记住就好。
依次编号,凡是空着的地方,也标号,将有数字的填入,反之空着
则,父节点若为n,则左子树为2n,右子树为2n+1,通过下标之间的函数关系来判断层数,但你可以想像,如果空的数据比较多,则数组的方法并不适用
接下来说一说结构体的结构
struct tree
{
int left;
int data;
int right;
};
typedef struct tree treenode;
treenode b_tree[15];
最后一种谈谈链式表
struct tree
{
struct tree *left;
int data;
struct tree *right;
}
typedef struct tree treenode;
treenode *b_tree;
在遍历的方法上根据data的位置可以分为前序中序和后序
前序DLR 中序LDR 后序LRD
此处提供前序遍历方法
void preorder(b_tree point)
{
if(point!=NULL)
{
printf("%d",point->data);
preorder(point->left);
preorder(point->right);
}
}
很简单,能看得出来使用的是递归,这是个非常好的方法,如果实在理解不了,强记住就好。
相关文章推荐
- 数据结构_不带头结点的链表逆制
- 第六周数据结构实践——后缀表达式(栈)【项目5 - 后缀表达式】
- 算法与数据结构题目的 PHP 实现:栈和队列 由两个栈组成的队列
- 算法导论第十四章 数据结构的扩张
- 第六周数据结构实践——数制转换(栈)【项目4 - 数制转换】
- 严蔚敏 数据结构 4.30 最长公共字串
- 第七周--数据结构--建立链队算法库
- 数据结构——数组与广义表篇——猴子选大王(数组版)——v2.0
- 数据结构学习笔记
- 数据结构——数组与广义表篇——猴子选大王(数组版)——v1.0
- 数据结构与算法学习笔记——二叉树遍历(二)(Morris Traversal)
- 第七周--数据结构--建立顺序环形队列算法库
- 第7周SHH数据结构—【项目2 - 建立链队算法库】
- 第七周 数据结构之自建算法库——数据环形队列
- *第九周*数据结构实践项目一【猴子选大王(数组)】
- 第六周数据结构实践——括号的匹配(栈)【项目3-括号的匹配】
- 项目4.1 -- 广义表的原子统计
- 数据结构实践——字符串加密
- 【串项目3-顺序串算法——第8周】
- 项目4-广义表算法库及应用