本文共 1818 字,大约阅读时间需要 6 分钟。
二叉树并不是每一个指针都能够都能完全被利用上,叶子节点的两个指针都没有被引用,为空。希望充分利用其所有指针,在二叉树的顺序存储结构中用其剩余指针分切指向某种遍历顺序下前驱节点和后继节点
图示:public HeroArrangement pre = null;public void threadedNotes(HeroArragement node){ //为什么要传入对应的节点,线索化不应该是所有的结点都进行线索化吗 if (node == null){ return; } //先线索化左子树 threadedNotes(node.getLeft()); //线索化当前节点 //先处理当前节点的前驱节点 if(node.getLeft() == null){ //让当前节点的左指针指向前驱节点 node.setLeft(pre); //修改左指针的数据类型 node.setLeftType(1); } //处理后继节点,在递归的时候由下一次处理 if(pre != null && pre.getRight() == null){ //让前驱指针的右指针位当前指针,因为递归的单向性, // 所以必须单向来改变他的值,不可以及改变左边的指针,又改变右边的指针 pre.setRight(node); pre.setRightType(1); } //每处理一个节点,让当前节点是下一个节点的前驱节点 //迭代的条件 pre = node; //再线索化右子树 threadedNotes(node.getRight()); }
class HeroArragement{ private int heroNo; private String heroName; HeroArragement left; HeroArragement right; //因为指针有不同的情况,所以设置变量 //说明: //LeftType == 0,表示指向左子树,如果是1,标志指向前驱节点 //RightType == 0,表示指向右子树,如果是1,表示指向后继节点 private int leftType; private int RightType; ... }
转载地址:http://pqgpb.baihongyu.com/