1 package TreeNode; 2 /** 3 * 1. 将树转换成双向链表 4 * 注意点: Java过程中 没有地址传递 ,只能将 pLastNode 设置成全局变量*/ 5 public class TreeCovertDoubleNode { 6 7 private TreeNode Tree; 8 public TreeCovertDoubleNode(TreeNode T) 9 { 10 this.Tree=T; 11 } 12 13 public TreeNode convert(TreeNode pRootTree) 14 { 15 // 16 if(pRootTree==null || (pRootTree.left==null && pRootTree.right==null)) 17 return pRootTree; 18 19 20 ConvertTree(pRootTree); 21 // 最后得到的pLastNode结点的值最大链表值 22 TreeNode pnewHead=pLastNode; 23 while(pnewHead!=null && pnewHead.left!=null) 24 pnewHead=pnewHead.left; 25 26 PrintNode(pnewHead); 27 return pnewHead; 28 } 29 public void PrintNode(TreeNode pnewHead) 30 { 31 TreeNode p=pnewHead; 32 while(p!=null) 33 { 34 System.out.print(p.val+" "); 35 p=p.right; 36 } 37 } 38 TreeNode pLastNode=null; 39 public void ConvertTree(TreeNode pNode) 40 { 41 // 采用中序遍历 42 if(pNode==null) 43 return; 44 45 TreeNode pcurrent=pNode; 46 47 if(pcurrent.left!=null) 48 ConvertTree(pcurrent.left); 49 50 pcurrent.left=pLastNode; 51 52 if(pLastNode !=null) 53 pLastNode.right=pcurrent; 54 55 pLastNode=pcurrent;// 出现问题在于pLastNode 是局部遍量,不是全局变量 56 57 if(pcurrent.right!=null) 58 ConvertTree(pcurrent.right); 59 } 60 61 public static void main(String[] args) { 62 // TODO Auto-generated method stub 63 int array1[]={10,6,14,4,8,12,16,-1,-1,-1,-1,-1,-1,-1,-1}; 64 TreeCreate Tree1=new TreeCreate(array1); 65 Tree1.preShow(Tree1.root); 66 TreeCovertDoubleNode T=new TreeCovertDoubleNode(Tree1.root); 67 T.convert(T.Tree); 68 } 69 70 }
结果显示 // 注意全局变量和局部变量显示问题