初识二叉树时候,为三种遍历方式所困扰,不知道这三种遍历方式怎么记忆。
二叉数的性值:
左节点值小于等于根节点
右节点值大于等于根节点
所有子树依然满足二叉树
随着开发经验的加深,开始逐渐明白,二叉树的三种遍历方式是以代码中对树的枝叶进行处理的位置而命名的。
要了解三序遍历,并非先了解三序遍历实际的遍历数据的顺序,而是将三遍历对应的代码写出来。
首先定义一颗二叉树
struct bstree_node {
KEY_VALUE data;
struct bstree_node *left;
struct bstree_node *right;
};
struct bstree {
struct bstree_node *root;
};
前序遍历:
int bstree_traversal(struct bstree_node *node) {
if (node == NULL) return 0;
printf("%4d ", node->data);
bstree_traversal(node->left);
bstree_traversal(node->right);
}
中序遍历
int bstree_traversal(struct bstree_node *node) {
if (node == NULL) return 0;
bstree_traversal(node->left);
printf("%4d ", node->data);
bstree_traversal(node->right);
}
后续遍历
int bstree_traversal(struct bstree_node *node) {
if (node == NULL) return 0;
bstree_traversal(node->left);
bstree_traversal(node->right);
printf("%4d ", node->data);
}
由代码可以推出树中遍历的方式。