树的三种遍历方法:前序,中序和后序及其代码实现。
在此分别总结先序,中序,后序的结点输出顺序。
个人记忆理解:这三种遍历顺序都是相对于根节点的访问顺序来命名的。
先序:
1.访问根结点
2.访问左子树
3.访问右子树
中序:
1.访问左子树
2.访问根结点
3.访问右子树
访问左子树。【先访问左子树中的左子树,再访问左子树中的右子树。】直到访问到叶子结点后输出。
输出根。
访问右子树。【先访问右子树中的左子树,再访问右子树中的右子树。】直到访问到叶子结点后输出。
后序:
1.访问左子树
2.访问右子树
3.访问根
访问左子树。【先访问左子树中的左子树,再访问左子树中的右子树】。直到访问到叶子结点后输出。
访问右子树。【先访问右子树中的左子树,再访问右子树中的右子树】。直到访问到叶子结点后输出。
再返回访问根,并输出。
代码实例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct treenode {
void *data;
struct treenode *left;
struct treenode *right;
} treenode;
typedef struct tree {
treenode *root; //根节点
//其他属性...
} tree;
treenode *make_node(void *data){
treenode *node = (treenode *)malloc(sizeof(treenode));
bzero(node, sizeof(*node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 先序遍历 根节点 -> 左节点 -> 右节点
void first_sort_var_dump(const treenode *node) {
if (node == NULL) {
return;
}
printf("node->data: %s\n"