一个很精妙的想法,把节点的左右孩子空指针利用起来,省去了遍历时栈的占用。
明白点就是,如果一个结点他的左右孩子非空,那么ltag,rtag就是0.否则就是1,表示这是一个线索。
下面是主要的代码:
- public void inThread(Node root){
- if(root != null){
- inThread(root.getLeft()) ;//线索化左孩子
- if(null == root.getLeft()){//左孩子为空
- root.setLeftIsThread(true) ;//将左孩子设置为线索
- root.setLeft(pre) ;
- }
- if(pre!=null&&null == pre.getRight()){//右孩子为空
- pre.setRightIsThread(true) ;
- pre.setRight(root) ;
- }
- pre = root ;
- inThread(root.getRight()) ;//线索化右孩子
- }
- }