时间: 2020-06-13 20:46
- 二叉树节点的定义
typedef struct btree_ {
int data;
btree_* left;
btree_* right;
}btree;
- 节点的插入
void insertBTree(btree** head, btree* node) {
if (!node) {
return;
}
node->left = NULL;
node->right = NULL;
btree* p = *head;
btree* tmp = NULL;
if (!(*head)) {
*head = node;
}
else {
while (p) {
tmp = p;
if (node->data < p->data) {
p = p->left;
}
else {
p = p->right;
}
}
if (node->data < tmp->data) {
tmp->left = node;
}
else {
tmp->right = node;
}
}
}
- 递归–前序遍历
void bl(btree* head) {
if (!head) {
return;
}
printf("%d ", head->data);
bl(head->left);
bl(head->right);
}
- 递归–中序遍历
void bl(btree* head) {
if (!head) {
return;
}
bl(head->left);
printf("%d ", head->data);
bl(head->right);
}
- 递归–后序遍历
void bl(btree* head) {
if (!head) {
return;
}
bl(head->left);
bl(head->right);
printf("%d ", head->data);
}
- 总结: 采用递归法进行前序遍历, 中序遍历, 后序遍历时, 只需要调换 printf 的位置即可达到相应的遍历效果.
- #########################################
- (1) 递归法在第一次遍历到达该位置时打印便是前序遍历,
(2) 在第二次到达该位置时打印便是中序遍历,
(3)在第三次到达该位置时打印便是后续遍历.