n个结点的二叉链表中含有2n-(n-1)=n+1
个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索") 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。
public class ThreadedBinaryTree {
private TreeNode root;
private TreeNode pre;
public ThreadedBinaryTree ( TreeNode root) {
super ( ) ;
this . root = root;
}
public void infixList ( ) {
TreeNode cur = root;
while ( cur != null) {
while ( cur. leftType == 0 ) {
cur = cur. left;
}
System. out. println ( cur) ;
while ( cur. rightType == 1 ) {
cur = cur. right;
System. out. println ( cur) ;
}
cur = cur. right;
}
}
public void infixThreadedTreeNodes ( TreeNode treeNode) {
if ( treeNode == null) {
return ;
}
infixThreadedTreeNodes ( treeNode. left) ;
if ( treeNode. left == null) {
treeNode. left = pre;
treeNode. leftType = treeNode. PRECURSOR_OR_SUCCESSOR;
}
if ( pre != null && pre. right == null) {
pre. right = treeNode;
pre. rightType = treeNode. PRECURSOR_OR_SUCCESSOR;
}
pre = treeNode;
infixThreadedTreeNodes ( treeNode. right) ;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
int leftType;
int rightType;
static final int SUBTREE = 0 ;
static final int PRECURSOR_OR_SUCCESSOR = 1 ;
public TreeNode ( int val) {
super ( ) ;
this . val = val;
}
@Override
public String toString ( ) {
return "TreeNode [val=" + val + "]" ;
}
}