代码:

  • 1:类[BinaryTree]中写出对应的方法【其余代码看4.4】
//用于临时存储前驱节点
TreeNode pre = null;

//中序线索化二叉树
public void treeNodes(){
treeNodes(root);
}
public void treeNodes(TreeNode node) {
//当前节点如果为null,直接返回
if(node == null){
return;
}

//处理左子树
treeNodes(node.leftNode);
//处理前驱节点
if(node.leftNode == null){
//让当前节点的左指针指向前驱节点
node.leftNode = pre;
//改变当前节点左指针的类型
node.leftType = 1;
}
//处理前驱节点的右指针,如果前驱节点的右指针是null(没有指向右子树)
if(pre != null && pre.rightNode == null){
//让前驱节点的右指针指向当前节点
pre.rightNode = node;
//改变前驱节点的右指针类型
pre.rightType = 1;
}

//每处理一个节点,当前节点是下一个节点的前驱节点
pre = node;
//处理右子树
treeNodes(node.rightNode);

}
  • 2:类[TreeNode]中写出标识指针类型【其余代码看4.4】
//标识指针类型
int leftType;
int rightType;
  • 3:类[TestBinaryTree]中写出测试【其余代码看4.4】
TreeNode fiveNode = new TreeNode(5);
rootL.setRightNode(fiveNode);

/**
* 中序线索化二叉树
*/
binTree.treeNodes();
//查找5节点
TreeNode rightNode = fiveNode.rightNode;
//TreeNode treeNode = binTree.frontSearch(5);
//获取5节点的后继节点
//TreeNode rightNode = treeNode.rightNode;
System.out.println(rightNode.value);
  • 4:结果: