• 将树转换成双向链表


     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 }

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

  • 相关阅读:
    ALV实时刷新功能的实现
    sap中批量导入Excel表格中的数据
    从se11新建的表维护中,给维护的数据做限制处理,例如,只允许输入vp开头的数据
    abap之ranges使用
    Abap中LOOP循环时使用AT FIRST. 传数过程中出现一串 ******** ------解决办法
    Django项目-创建第一个页面
    Python3创建django项目
    Python3安装Pyyaml
    Appium命令行环境搭建及参数使用
    c# ABP 中开启新的事务
  • 原文地址:https://www.cnblogs.com/woainifanfan/p/6603882.html
Copyright © 2020-2023  润新知