Java版資料結構之線索二叉樹
阿新 • • 發佈:2018-12-19
簡介
- 中序線索化二叉樹
- 中序線索化遍歷
程式碼實現
public class MyThreadTree { int data;//結點權值 MyThreadTree leftTree;//左子樹 MyThreadTree rightTree;//右子樹 int leftType;//左子樹型別 0:左子樹 1:前驅結點 int rightType;//右子樹型別 0:右子樹 1:後繼結點 MyThreadTree pre=null;//中序線索化前驅結點 public MyThreadTree(int data) { this.data = data; leftType=0; rightType=0; } public void setLeftTree(MyThreadTree leftTree) { this.leftTree = leftTree; } public void setRightTree(MyThreadTree rightTree) { this.rightTree = rightTree; } //中序遍歷 public void middleShow(){ if(this==null){ return; } //左子樹 if(this.leftTree!=null){ this.leftTree.middleShow(); } //根 System.out.println(this.data); //右子樹 if(this.rightTree!=null){ this.rightTree.middleShow(); } } //中序線索化二叉樹 public void middleThreadTree(MyThreadTree node){ if(node==null){ return; } //左子樹 if(node.leftTree!=null){ middleThreadTree(node.leftTree); } //根 if(node.leftTree==null){ node.leftTree=pre; node.leftType=1; } if(pre!=null&&pre.rightTree==null){ pre.rightTree=node; pre.rightType=1; } pre=node; //右子樹 if(node.rightTree!=null){ middleThreadTree(node.rightTree); } } //中序線索化遍歷 public void middleThreadShow(){ if(this==null){ return; } MyThreadTree root=this; while (root!=null){ //左子樹 while(root.leftType==0){ root=root.leftTree; } //列印當前結點的值 System.out.println(root.data); //右子樹 while(root.rightType==1){ root=root.rightTree; System.out.println(root.data); } //當結點有右子樹時 root=root.rightTree; } } }