前言
为什么会有线索二叉树?当以二叉链表形式来保存二叉树时,只能找到节点的左右子树信息,而不能直接得到节点的前驱和后继信息(只有通过遍历,在动态过程中才能查到前驱和后继的信息)
因此就有了线索二叉树,由二叉树的性质可知,一棵具有 n 个节点的二叉树,对应的二叉链表中共有 2n 个指针域,其中 n-1 个用于指向除根节点以外的 n-1 个节点,另外n+1个指针域为空。可以利用二叉链表中的这些空指针域来存放节点的前驱和后继,即可找到线索二叉树。
线索二叉树的创建
代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef char DATE;
typedef enum
{
subtree,
thread
}nodeflag;
typedef struct threadtree
{
DATE date;
nodeflag lflag;
nodeflag rflag;
struct threadtree *left;
struct threadtree *right;
}threadbintree;
threadbintree *previous=NULL;
//设置根节点
threadb