线索二叉树的一些思考
将一棵二叉树线索化,能加快找前驱和后继的速度,这就是线索二叉树和普通二叉树相比,它最大的优势。
下面将主要讲述如何找前驱和后继、如何将二叉树线索化。
中序的前驱和后继
1)对于中序线索二叉树,它的前驱为:左子树按照中序遍历最后一个节点
2)他的后继为:右子树按照中序遍历第一个节点
如何找第一个节点和最后一个节点(中序)
1)第一个节点
一直往左走,最左边的即为第一个节点
2)最后一个节点
一直往右走,最右边的即为最后节点
对于前序和后序
1)前序的后继节点
若有左孩子,则为左孩子;若只有右孩子,则为右孩子。若为叶结点,则右链域直接指示了节点的后继。
2)后序的前驱节点
若有右孩子则为右孩子,没有有孩子只有左孩子则为左孩子。若该节点为叶结点,那它的左链域直接指示了节点的前驱。
如何将一颗二叉树线索化
设立指针pre指向刚刚访问过的节点,指针p指向正在访问的节点。pre即为p的前驱。在中序遍历中,检查p的做指针是否为空,若为空:p->left = pre;检查pre的右指针是否为空,若为空:pre->right = p;这是一个递归的过程。