数据结构建立先序线索二叉树代码C语言
时间: 2023-08-14 11:07:51 浏览: 157
以下是使用C语言实现先序线索二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点结构
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
int leftTag; // 左线索标志,0表示指向左子树,1表示指向前驱结点
int rightTag; // 右线索标志,0表示指向右子树,1表示指向后继结点
} TreeNode;
// 创建一个新结点
TreeNode* createNode(char data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
newNode->leftTag = 0;
newNode->rightTag = 0;
return newNode;
}
// 构建先序线索二叉树
void createPreThread(TreeNode* root, TreeNode** pre) {
if (root == NULL) {
return;
}
if (root->left == NULL) {
root->left = *pre;
root->leftTag = 1;
}
if (*pre != NULL && (*pre)->right == NULL) {
(*pre)->right = root;
(*pre)->rightTag = 1;
}
*pre = root;
if (root->leftTag == 0) {
createPreThread(root->left, pre);
}
if (root->rightTag == 0) {
createPreThread(root->right, pre);
}
}
// 先序遍历先序线索二叉树
void preOrderTraversal(TreeNode* root) {
TreeNode* current = root;
while (current != NULL) {
printf("%c ", current->data);
if (current->leftTag == 0) {
current = current->left;
} else {
current = current->right;
}
}
}
int main() {
// 创建二叉树结点
TreeNode* root = createNode('A');
TreeNode* nodeB = createNode('B');
TreeNode* nodeC = createNode('C');
TreeNode* nodeD = createNode('D');
TreeNode* nodeE = createNode('E');
TreeNode* nodeF = createNode('F');
// 构建二叉树
root->left = nodeB;
root->right = nodeC;
nodeB->left = nodeD;
nodeB->right = nodeE;
nodeC->right = nodeF;
// 创建先序线索二叉树
TreeNode* pre = NULL;
createPreThread(root, &pre);
// 先序遍历先序线索二叉树
printf("先序遍历先序线索二叉树:");
preOrderTraversal(root);
return 0;
}
```
这段代码使用先序遍历的方式构建了一个先序线索二叉树,并实现了对先序线索二叉树进行先序遍历输出。你可以根据需要修改数据类型或结点的值来适应不同的场景。
阅读全文