c语言线索二叉树中序遍历
时间: 2023-07-09 11:38:34 浏览: 128
C语言实现线索二叉树的定义与遍历示例
下面是使用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) {
TreeNode* p = root;
while (p) {
// 找到最左边的节点
while (p->ltag == 0) {
p = p->left;
}
printf("%d ", p->val);
// 转向后继节点
while (p->rtag == 1 && p->right != NULL) {
p = p->right;
printf("%d ", p->val);
}
p = p->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;
}
```
其中,`createTreeNode()`函数用于创建一个线索二叉树节点;`createThreadedBinaryTree()`函数用于构建线索二叉树;`inorderTraversal()`函数用于中序遍历线索二叉树。在`inorderTraversal()`函数中,使用双重循环找到最左边的节点,并输出其值,然后转向其后继节点,重复操作直到遍历完整个线索二叉树。
阅读全文