这里把个人的代码记录下来,仅供各位同学参考,代码有不妥之处欢迎指正。
节点类
class HeroNode{
private int no;
private String name;
private HeroNode left;
private HeroNode right;
//子节点的类型,0为左子树,1为前驱节点
private int leftType;
private int rightType;
}
后序线索化
/** 后序线索化
* 1
* 3 6
* 8 10 14 16
* 19 20
* 后序遍历:19 20 8 10 3 14 16 6 1
*/
public void postThreadedNode(HeroNode node){
if(node==null){
return;
}
//先处理左子树
postThreadedNode(node.getLeft());
//再处理右子树
postThreadedNode(node.getRight());
if(node.getLeft()==null){
node.setLeft(pre);
node.setLeftType(1);
}
if(pre != null && pre.getRight()==null){
pre.setRight(node);
pre.setRightType(1);
}
pre=node;
}
后序遍历方法
//遍历后续线索化二叉树
public void postThreadedList(HeroNode newRoot){
if (newRoot.getLeftType()==0){
postThreadedList(newRoot.getLeft());
}
if (newRoot.getRightType()==0){
postThreadedList(newRoot.getRight());
}
System.out.println(newRoot);
}