先序遍历:
void preOrder(node_t* root) {
if (root != NULL) {
printf("%d ", root->data);
preOrder(root->left);
preOrder(root->right);
}
}
中序遍历:
void inOrder(node_t* root) {
if (root != NULL) {
inOrder(root->left);
printf("%d ", root->data);
inOrder(root->right);
}
}
后序遍历:
void postOrder(node_t* root) {
if (root != NULL) {
postOrder(root->left);
postOrder(root->right);
printf("%d ", root->data);
}
}
层次遍历
层次遍历按照从上到下、从左到右的顺序依次访问每个节点,需要借助队列数据结构实现。
void levelOrder(node_t* root) {
if (root == NULL) {
return;
}
queue_t* q = createQueue();
enqueue(q, root);
while (!isEmptyQueue(q)) {
node_t* curr = dequeue(q);
printf("%d ", curr->data);
if (curr->left != NULL) {
enqueue(q, curr->left);
}
if (curr->right != NULL) {
enqueue(q, curr->right);
}
}
destroyQueue(q);
}
以上代码中,enqueue
和dequeue
函数分别用来向队列中添加元素和取出队列头部元素。这里使用自定义的队列结构体queue_t
,可以参考队列的实现方法。
综上所述,C语言可以通过递归或非递归方式实现二叉树的各种遍历方式。在实际应用中,应根据具体需要选取合适的遍历方式来访问二叉树,以满足不同的算法需求。