zoukankan      html  css  js  c++  java
  • 将树转换成双向链表

     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 }

    结果显示  // 注意全局变量和局部变量显示问题

  • 相关阅读:
    [原]跟我学silverlight系列教程[1]—wpf/silverlight体系架构和运行机制
    [转载]My97DatePicker在Frame中无法打开站点
    sql select的时候按特定的顺序排序
    javascript获取滚动条位置
    sql2005 数据库没有完全关闭,无法重新生成日志
    .Net framework
    输出datagrid的内容到excel
    IIS中网站出错
    [原]跟我学silverlight系列教程
    SharePoint2010 的ADFS2.0设置
  • 原文地址:https://www.cnblogs.com/woainifanfan/p/6603882.html
Copyright © 2011-2022 走看看