中序线索化:、
递归左子树,处理当前结点,递归右子树
public static void prethreadedNode(BTNode btNode){//中序线索化, if(btNode==null)return; prethreadedNode(btNode.lchild);//递归左子树 if(btNode.lchild==null){ btNode.setLeft(pre); btNode.typelchild=1; } if(pre!=null&&pre.rchild==null){ pre.typerchild=1; pre.setRight(btNode); } pre=btNode;//pre不断跟进 prethreadedNode(btNode.rchild);//递归右子树 }
前序线索化:
处理当前节点,递归左子树,递归右子树
public static void prethreadedNode(BTNode btNode){//前序线索化 if(btNode==null)return; if(btNode.lchild==null){ btNode.setLeft(pre); btNode.typelchild=1; } if(pre!=null&&pre.rchild==null){ pre.typerchild=1; pre.setRight(btNode); } pre=btNode; if(btNode.typelchild==0)prethreadedNode(btNode.lchild); if(btNode.typerchild==0) prethreadedNode(btNode.rchild); }
相较于中序线索化,前序在递归左右子树时要加上判断,如果没有判断将陷入左下角的来回循环中