设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右 子树)。用c语言写算法,不用写完整
时间: 2024-12-02 11:15:49 浏览: 6
设计一个双序遍历(也称为前序遍历+后序遍历)的二叉树遍历算法,我们可以分为两个递归函数:前序遍历(根-左-右)和后序遍历(左-右-根),然后结合这两个函数实现双序遍历。以下是简化版的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 前序遍历函数
void preorderTraversal(TreeNode* node) {
if (node != NULL) {
printf("%d ", node->val); // 先访问节点
preorderTraversal(node->left); // 再遍历左子树
preorderTraversal(node->right); // 最后遍历右子树
}
}
// 后序遍历函数
void postorderTraversal(TreeNode* node) {
if (node != NULL) {
postorderTraversal(node->left); // 先遍历左子树
postorderTraversal(node->right); // 然后遍历右子树
printf("%d ", node->val); // 最后访问节点
}
}
// 双向双序遍历函数,将前序遍历和后序遍历组合
void doubleOrderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val);
postorderTraversal(root); // 先前序后后序
}
}
int main() {
// 初始化一个示例二叉树
// ...
TreeNode* root = ...; // 树的根节点
doubleOrderTraversal(root); // 调用双序遍历
return 0;
}
```
阅读全文