设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树)。用C语言写算法
时间: 2024-12-02 17:15:39 浏览: 13
设计一个二叉树的前序(根节点 -> 左子树 -> 右子树)然后后序(左子树 -> 右子树 -> 根节点)的双序列遍历(即先访问根节点,然后递归地按照先序遍历左子树,接着后序遍历左子树,最后后序遍历右子树),可以用递归的方式来实现。以下是C语言的一个简单实现:
```c
#include <stdio.h>
// 定义二叉树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 前序遍历函数
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val); // 先访问根节点
preorderTraversal(root->left); // 再遍历左子树
preorderTraversal(root->right); // 最后遍历右子树
}
}
// 后序遍历函数
void postorderTraversal(TreeNode* root) {
if (root != NULL) {
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->val); // 最后访问根节点
}
}
// 双顺序遍历结合上述两个函数
void dualOrderTraversal(TreeNode* root) {
if (root != NULL) {
preorderTraversal(root);
printf("\n"); // 换行区分前序和后序部分
postorderTraversal(root);
}
}
int main() {
// 创建一个示例二叉树并调用双顺序遍历
// ...
TreeNode* exampleRoot = ...; // 假设这里已经初始化了二叉树的根节点
dualOrderTraversal(exampleRoot);
return 0;
}
```
阅读全文