中序线索化二叉树C语言代码
时间: 2023-09-09 19:07:17 浏览: 95
以下是中序线索化二叉树的C语言代码:
```c
typedef struct ThreadNode {
int data; //节点数据
struct ThreadNode* leftChild; //左孩子指针
struct ThreadNode* rightChild; //右孩子指针
int ltag; //左标志位,0表示左孩子,1表示前驱
int rtag; //右标志位,0表示右孩子,1表示后继
} ThreadNode, *ThreadTree;
void InThread(ThreadTree p, ThreadTree& pre) {
if (p != NULL) {
InThread(p->leftChild, pre); //递归左子树
if (p->leftChild == NULL) { //没有左孩子,将ltag赋值为1,leftChild指向前驱
p->ltag = 1;
p->leftChild = pre;
}
if (pre != NULL && pre->rightChild == NULL) { //没有右孩子,将rtag赋值为1,rightChild指向后继
pre->rtag = 1;
pre->rightChild = p;
}
pre = p; //更新前驱节点
InThread(p->rightChild, pre); //递归右子树
}
}
ThreadTree CreateInThread(ThreadTree root) {
ThreadTree head = (ThreadTree)malloc(sizeof(ThreadNode)); //创建头节点
head->ltag = 0;
head->rtag = 1;
head->rightChild = head;
if (root == NULL) { //空树
head->leftChild = head;
return head;
} else {
ThreadTree pre = head;
head->leftChild = root; //头节点的左孩子指向根节点
InThread(root, pre); //中序遍历线索化
pre->rightChild = head; //最后一个节点的后继节点指向头节点
pre->rtag = 1;
head->rightChild = pre; //头节点的后继节点指向最后一个节点
return head;
}
}
```
非常感谢您的提问,希望这段代码能够帮助到您!
阅读全文