线索二叉树
n个节点的二叉树含有n+1个空指针域。利用这些空指针域,存放指向节点的在某种遍历次序下的前驱节点及后继节点的指针,这种附加的指针称为"线索",加上了线索的二叉树就是"线索二叉树"。
根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。
线索化二叉树的本质是将一个复杂的非线性结构转换为线性结构,使每一个节点都有了唯一的前驱节点和后续节点(第一个节点无前驱,最后一个节点无后继)。
前驱节点:线索化二叉树时,某节点的前一个节点叫前驱节点
后继节点:线索化二叉树时,某节点的后一个节点叫后继节点
Kotlin 中如何中序线索化二叉树
/**
* 中序线索化二叉树
* */
fun midThreadNodes(node:ThreadTreeNode?){
// 当递归到最右侧叶子结点则结束
if (null == node){
return
}
// 处理左子树
midThreadNodes(node?.leftNode)
// ① 处理左指针
if (null == node.leftNode){