线索二叉树的建立代码c语言
时间: 2023-12-08 14:06:43 浏览: 76
线索二叉树的建造和遍历c语言
下面是线索二叉树的建立代码(C语言):
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点类型
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
int ltag; // 左线索标志
int rtag; // 右线索标志
} TreeNode;
// 全局变量,用来记录上一个访问的结点
TreeNode *pre = NULL;
// 创建二叉树
TreeNode* createTree() {
int val;
scanf("%d", &val);
if (val == -1) {
return NULL;
} else {
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = val;
node->left = createTree();
node->right = createTree();
node->ltag = 0;
node->rtag = 0;
return node;
}
}
// 中序遍历线索化二叉树
void inOrderTraversal(TreeNode *root) {
TreeNode *p = root;
while (p != NULL) {
while (p->ltag == 0) {
p = p->left;
}
printf("%d ", p->data);
while (p->rtag == 1) {
p = p->right;
printf("%d ", p->data);
}
p = p->right;
}
}
// 中序线索化二叉树
void inOrderThreading(TreeNode *root) {
if (root == NULL) {
return;
}
// 遍历左子树
inOrderThreading(root->left);
// 处理当前结点
if (root->left == NULL) {
root->left = pre;
root->ltag = 1;
}
if (pre != NULL && pre->right == NULL) {
pre->right = root;
pre->rtag = 1;
}
pre = root;
// 遍历右子树
inOrderThreading(root->right);
}
int main() {
// 创建二叉树
printf("请输入二叉树的结点,-1表示空结点:\n");
TreeNode *root = createTree();
// 中序线索化二叉树
inOrderThreading(root);
// 遍历线索化二叉树
printf("中序遍历线索化二叉树:\n");
inOrderTraversal(root);
return 0;
}
```
阅读全文