本文讲解 C#通过中序遍历对二叉树进行线索化 在二叉树的结点上加上线索的二叉树称为线索二叉树,对二叉树以某种遍历方式(如先序、中序、后序或层次等)进行遍历,使其变为线索二叉树的过程称为对二叉树进行线索化。 [1] 对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。
这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。 注意:线索链表解决了无法直接找到该结点在某种遍历序列中的前驱和后继结点的问题,解决了二叉链表找左、右孩子困难的问题。
/// /// 通过中序遍历对二叉树线索化 /// /// /// static void InThread(ref ThreadNode p, ref ThreadNode pre) { if (p != null) { InThread(ref p.lchild,ref pre); if (p.lchild == null) { p.lchild = pre; p.ltag = 1; } if (pre!=null&&pre.rchild==null) { pre.rchild = p;pre.rtag = 1; } pre = p; InThread(ref p.rchild, ref pre); } } /// /// 创建线索二叉树主逻辑 /// /// static void CreateInThread(ref ThreadNode T) { ThreadNode pre = null; if (T!=null) { InThread(ref T,ref pre); pre.rchild = null; pre.rtag = 1; }