二叉树的遍历顺序
**前序遍历:**1、2、4、5、3、6
**中序遍历:**4、2、5、1、6、3
**后序遍历:**4、5、2、6、3、1
线索二叉树
利用二叉树链表的空指针实现线索二叉树。
线索化:
- 若无左子树,则将其左指针指向其前驱结点;
- 若无右子树,则将其右指针指向其后继结点;
先序线索二叉树
**前序遍历:**1、2、4、5、3、6
中序线索二叉树(较为常用)
**中序遍历:**4、2、5、1、6、3
中序遍历:第一个结点是最左侧结点,最后一个结点是最右边的结点。
前驱结点:
- 若左指针为线索,则其指向结点为前驱结点;
- 若左指针为左孩子,则其左子树的最右侧结点为前驱结点。
后继结点:
- 若右指针为线索,则其指向结点为后驱结点;
- 若右指针为右孩子,则其右子树的最左侧结点为后驱结点。
void CreateInThread(ThreadTree T){
ThreadTree pre = NULL;
if(T!=NULL){
InTread(T,pre);
pre->rchild=NULL;
pre->rtag=1;
}
}
// 引用类型:需要对其进行修改
void InTread(ThreadTree &p,ThreadTree &pre){
// 传入参数 线索二叉树根结点、对应节点前驱结点
if(p!=NULL){
// 判断根结点是否为空
InThread(p->lchild,pre);
// 线索化,递归调用线索化左子树:左子树根结点及前驱结点
if(p->lchikd==NULL){
p->lchild=pre;
p->ltag=1;
}
if(pre!=NULL && pre->rchild==