c语言线索二叉树递归中序遍历
时间: 2023-07-09 18:38:34 浏览: 116
线索二叉树也可以使用递归的方式进行中序遍历。下面是使用C语言实现线索二叉树递归中序遍历的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 线索二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
int ltag;
int rtag;
} TreeNode;
// 中序遍历线索二叉树(递归)
void inorderTraversal(TreeNode* root) {
if (root != NULL) {
if (root->ltag == 0) {
inorderTraversal(root->left);
}
printf("%d ", root->val);
if (root->rtag == 0) {
inorderTraversal(root->right);
}
}
}
// 创建线索二叉树节点
TreeNode* createTreeNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
node->ltag = 0;
node->rtag = 0;
return node;
}
// 构建线索二叉树
void createThreadedBinaryTree(TreeNode* root) {
TreeNode* pre = NULL;
if (root != NULL) {
createThreadedBinaryTree(root->left);
if (root->left == NULL) {
root->ltag = 1;
root->left = pre;
}
if (pre != NULL && pre->right == NULL) {
pre->rtag = 1;
pre->right = root;
}
pre = root;
createThreadedBinaryTree(root->right);
}
}
int main() {
// 构建线索二叉树
TreeNode* root = createTreeNode(1);
root->left = createTreeNode(2);
root->right = createTreeNode(3);
root->left->left = createTreeNode(4);
root->left->right = createTreeNode(5);
root->right->left = createTreeNode(6);
root->right->right = createTreeNode(7);
createThreadedBinaryTree(root);
// 中序遍历线索二叉树
printf("Inorder Traversal: ");
inorderTraversal(root);
printf("\n");
return 0;
}
```
在`inorderTraversal()`函数中,先判断节点的左子树是否为线索指针,如果不是,则递归遍历其左子树;然后输出节点的值;最后判断节点的右子树是否为线索指针,如果不是,则递归遍历其右子树。
阅读全文