1、请给出此数据结构的定义。
2、请给出遍历上面给出的源程序的算法框架什么算法结构?
应该是个二叉树吧,每个树接点有两个孩子,if和else
遍历的原则是深度优先

解决方案 »

  1.   

    我对数据结构使用的时间比较长久,而且解决过很多问题。
    感觉您这道题目根本用不到这么复杂的设计。
    对与这个需求,建议解决办法下:
    1.这三个数保存在一个循环列表中。(循环列表应该是最简单的数据结果了。)
    在方法体内部,对列表内数据循环三次,每次,都进行“统一”规则判断。
    2.具体如下:
        public String getTrangleType(int aa,int bb,int cc)
        {
            String type="Common triangle"; //一般三角形;
            if( (aa > 0 && bb > 0 && cc > 0)
               &&  (aa + bb > cc && aa + cc > bb ) )
           {
               int[] d = new int[3];
               d[0] = aa;
               d[1] = bb;
               d[2] = cc;
               int a, b, c;
               for (int i = 0; i < d.length; i++) {
                   //实现列表循环,对循环列表取值
                   a = d[i];
                   b = d[ (i + 1) % d.length];
                   c = d[ (i + 2) % d.length];
                   if(a == b && b == c)
                   {
                       type = "equilateral triangle";//等边三角形
                       break;
                    }
                   else if(a==b)
                   {
                       if(a * a + b * b == c * c)
                       {
                           type = "isoceles and right-angled triangle"; //等腰直角三角形
                       }
                       else
                           type = "isoceles triangle"; //等腰三角形
                       break;
                   }
                   else if(a * a + b * b == c * c)
                   {
                       type = "right-angled triangle"; //直角三角形
                   }
               }
           }
           else
               type="failed to construct triangle";
            return type;
        }
      

  2.   

    feiyuegaoshan(飞跃) :
       可能你的理解有错,这个被检测的函数TrangleTest2是存在于一个Demo.java中的,在检测TrangleTest2之前,是没有知道TrangleTest2内部的if-else的结构的,现在是要求一边扫描TrangleTest2,一边用一个数据结构表示TrangleTest2内部的if-else的结构,要求:
    1.给出这种数据结构2.给出遍历这种数据结构的算法框架。(至于如何找到Demo.java文件,以及如何在Demo.java中找到TrangleTest2,都可以不考虑)
      

  3.   

    我给个思路(可能很差也很烂)用树每个节点是一个条件表达式和其后的执行部分语句Parser按照"{}() "StringTokenizer, (一定要if(true){return;})
    检查{}配对,
    碰到if后第一个(,将与之配对的)内所有东西作条件,
    {}里面的所有String进入新的Parser,返回的ConditionalTree[](针对一系列if-else if)作为这个ContionalTree的subtrees,
    同时,与这个if同级的else if一起构成上一级的ConditionalTree[]返回给更上一层的调用者,这样可能最上层是一个ConditionalTree[],或许可以强制给他一个if(true)的上层ContionalTree视之成为单根
      

  4.   

    feiyuegaoshan(飞跃) ( ):就是一个用树的问题啊,你注意到没有,如果是个直角三角形,它会把别的类型覆盖掉而不是别的。(因为直角,等边,等腰都是同一级别的叶子)
      

  5.   

    受各位关于树的意见的启发,我定义了一个叫“三叉树”数据结构,大家讨论一下:一、 三叉树结点数据结构
    public class ThreeTreeNode {
      private String key;  //结点关键字
      public ThreeTreeNode left;
      public ThreeTreeNode middle;
      public ThreeTreeNode right;
      public int layer;   //结点所在的层数
      …………………………
    }二、三叉树逻辑定义
    1、 根结点为空。
    2、 结点的左孩子指向嵌套的if语句。
    3、 结点的中孩子指向与之匹配的else if和else语句块
    4、 结点的右孩子指向与之串行的if语句。
    5、 叶子结点的左、中、右孩子均为空三叉树类数据结构:
    public class ThreeTree {
     public ThreeTreeNode root;
    ……………………………..
    }
      

  6.   

    谢谢 asdmonster(asd)和 sqsavagepointer两位仁兄的提醒。
    是我理解错了:)
    原题是要扫描这个代码,而不是优化代码,来解决代码内部的问题。:P现在更正我的思路如下,敬请大家指教。1.使用一种变形的二叉树。
    对于某个局部片段,如果只有if else结构,当前节点记录if else,并将当前节点标记为树。
    分别定义为左子树(if 部分)和右子树(else部分)。 
    2.如果if else 后有与之串行的部分,则将串行部分分别定义为单独的树节点,
    然后把这些节点连同前面的节点,一起定义为森林。
    共同记录在树内。
    3.如果分析到了最末端,如,只剩下一个s=" ... ",则将次部分记录为叶子节点。
      

  7.   

    to feiyuegaoshan(飞跃) :
       请给出您所说的二叉树的结构定义如何?好像不是很清楚哦
      

  8.   

    如果一定要给个数据结构:public class DataModel{
      
        private String valude;//该节点的值
        private DataModel ifNode;//if节点
        private DataModel elseNode;//else节点
        
        //to add your code;
    }算法框架就不写了,随便找本书都能找到例子。
      

  9.   

    应该是这样:
    public class TreeNode
    {
    //标记此节点的性质,    public String ;}
      

  10.   

    (sorry,刚才又按tab键和空格了)
      应该是这样:
    public class TreeNode
    {
        //标记此节点的性质
        //0表示节点为二叉树  1表示此节点为森林 2表示此节点为叶子
        public String nodeType;
        //如果此节点为树,定义左子树,右子树,及其父亲。
        public TreeNode left,right,parent;
        //如果此节点为身林,定义身林内的兄弟
        public TreeNode[] brothers;
        //如果此节点为叶子,定义叶子内保存的节点数值
        public String nodeValue;
    }