用c语言代码实现在中序线索二叉树上插入一个结点p作为树中某结点q的左孩子上述要求的算法。(p、q为指针)
时间: 2023-06-10 22:03:38 浏览: 110
以下是用C语言实现在中序线索化二叉树上插入一个结点p作为树中某结点q的左孩子的算法:
```c
//定义中序线索化二叉树结点的数据结构
typedef struct ThreadedTreeNode {
int data; // 结点数据
int ltag; // 左线索标志,0表示有左子树,1表示左线索
int rtag; // 右线索标志,0表示有右子树,1表示右线索
struct ThreadedTreeNode *lchild; // 左孩子指针
struct ThreadedTreeNode *rchild; // 右孩子指针
} ThreadedTreeNode;
//在中序线索化二叉树上插入一个结点p作为树中某结点q的左孩子的函数
void insertLeftChild(ThreadedTreeNode *root, ThreadedTreeNode *q, ThreadedTreeNode *p) {
if (root == NULL) {
return;
}
//先找到q的前驱节点pre
ThreadedTreeNode *pre = q->lchild;
while (pre->rtag == 0) {
pre = pre->rchild;
}
p->ltag = 1; //将p的左线索标志置为1
p->rtag = 1; //将p的右线索标志置为1
p->lchild = q->lchild; //将p的左孩子指针指向q的左孩子
p->rchild = q; //将p的右孩子指针指向q
q->lchild = p; //将q的左孩子指针指向p
q->ltag = 0; //将q的左线索标志置为0
if (pre->rchild == q) { //如果q的左孩子有右子树
pre->rchild = p; //将q的前驱节点pre的右孩子指针指向p
}
}
```
感谢您对我提出问题,我会尽力回答!
阅读全文