数据结构与算法6:二叉树的存储结构与遍历
2014-01-19 16:46
169 查看
1. 二叉树的存储结构
二叉树的存储结构主要有两种。相对一般的树而言,二叉树比较特殊,存储也相对更简单明确。二叉树也是最常用的树。
如果二叉树接近满,那么可以使用顺序存储,因为二叉树的特殊性质,我们根据位置可以直接推算出它在树中的位置。如果是一般的二叉树的话,最常用的的还是二叉链表,即每个节点有两个指针,分别指向左子树和右子树。
2. 二叉树的遍历
二叉树的遍历主要是前序、中序和后续三种方式。其中前序遍历实际上是深度优先遍历。不多说,上代码。都是递归方式实现。
二叉树的存储结构主要有两种。相对一般的树而言,二叉树比较特殊,存储也相对更简单明确。二叉树也是最常用的树。
如果二叉树接近满,那么可以使用顺序存储,因为二叉树的特殊性质,我们根据位置可以直接推算出它在树中的位置。如果是一般的二叉树的话,最常用的的还是二叉链表,即每个节点有两个指针,分别指向左子树和右子树。
2. 二叉树的遍历
二叉树的遍历主要是前序、中序和后续三种方式。其中前序遍历实际上是深度优先遍历。不多说,上代码。都是递归方式实现。
#include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node* left; struct node* right; } node; void createBinaryTree(node* root) { int input; scanf("%d", &input); if (input == -1) { root = NULL; } else { root = (node*)malloc(sizeof(node)); *root->data = input; createBinaryTree(*root->left); createBinaryTree(*root->right); } } void firstRootVisit(node* root) { if (root == NULL) { return; } else { printf("%d ", *root->data); firstRootVisit(*root->left); firstRootVisit(*root->right); } } void lastRootVisit(node* root) { if (root == NULL) { return; } else { lastRootVisit(*root->left); lastRootVisit(*root->right); printf("%d ", *root->data); } } void middleRootVisit(node* root) { if (root == NULL) { return; } else { middleRootVisit(*root->left); printf("%d ", *root->data); middleRootVisit(*root->right); } } int main() { node* root; createBinaryTree(root); firstRootVisit(root); lastRootVisit(root); middleRootVisit(root); return 0; }
相关文章推荐
- 数据结构与算法简记:按层次顺序遍历和存储二叉树
- 算法系列(七)数据结构之树的基本结构和二叉树的遍历
- 数据结构 算法面试100题 之 逐层遍历二叉树元素
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 数据结构(13)二叉树的动态链表存储和遍历的实现
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 数据结构之自建算法库——二叉树的链式存储及基本运算
- 数据结构-二叉树的存储结构和遍历算法(四)
- 【数据结构与算法】二叉树的遍历
- 【数据结构与算法】二叉树广度遍历
- 数据结构(13)二叉树的动态链表存储和遍历的实现
- 数据结构把顺序存储的二叉树转换成链式存储及前序,中序,后序遍历
- 【数据结构与算法】根据遍历结果构建二叉树
- 数据结构与算法(十二)前/中/后遍历二叉树
- 数据结构与算法——二叉树的前序遍历,中序遍历,后序遍历
- 【数据结构与算法】(六) c 语言实现简单的二叉树静态创建及先序、中序、后序遍历
- 算法与数据结构基础4:C++二叉树实现及遍历方法大全
- 数据结构之自建算法库——二叉树的链式存储及基本运算
- 【数据结构作业四】以二叉链表作存储结构,建立一棵二叉树,并输出该二叉树的先序、中序、后序遍历序列、高度和其叶子结点数。
- 数据结构与算法 -- 二叉树链式详解((非)/递归遍历,叶子个数,深度计算)