遍历估计谁都会,你是指在不改BinaryNode定义的前提下空格输出难办吗?

解决方案 »

  1.   

    所在LEVEL打印相应的空也是很容易实现的.进入PRINTTREE将一个全域变量的值加一,
    执行完后将加全局变量的值减一.
    printTree()

      count++; //所有执行语句的最前面.
      执行打印;//紧接上面语句
      .....
      
      count--; //所有执行语句的最后面.
     
    }
      

  2.   

    修改程序如下,不知是否满足哦^_^:public class BinaryNode
     {
         class Node
         {
             String name;
             Node leftNode;
             Node rightNode;
             
             public Node(String name){
              this.name = name;
              this.leftNode = null;
              this.rightNode = null;
             }
          }
          
          Node root=null;
          private int count;
          
          public BinaryNode(){
           root = new Node("Root");
           root.leftNode = new Node("NODE3");
           root.leftNode.leftNode = new Node("NODE4");
           root.rightNode = new Node("NODE6");
           root.rightNode.leftNode = new Node("NODE5");
           root.rightNode.rightNode = new Node("NODE7");
          }
          public void printTree(){
           count = 0;
           print(root);
          }
          
          private void print(Node n){
           if(n==null)
           return;
           for(int i=0;i<count;i++)
          System.out.print(' ');
          System.out.println(n.name);
          count++;
          print(n.leftNode);
          print(n.rightNode);
          count--;
          }
          
          public static void main(String[] args){
           BinaryNode test = new BinaryNode();
           test.printTree();
          }
     }   
      

  3.   

    在给一个循环的版本:public void printTree(){  Stack s = new Stack();
     
      s.push(new Integer(0));
      s.push(root);
     
      while(!s.empty()){
      Node n = (Node)s.pop();
      Integer iSpace = (Integer)s.pop();
     
      int iNum = iSpace.intValue();
     
      for(int i=0;i<iNum;i++)
    System.out.print(' ');
    System.out.println(n.name);

    iNum++ ;


    if(n.rightNode != null){
    s.push(new Integer(iNum));
    s.push(n.rightNode);
    }

    if(n.leftNode != null){
    s.push(new Integer(iNum));
    s.push(n.leftNode);
    }
     
      }
     
          }
      

  4.   

    linux_328(企鹅) 不错啊!!
     FU......
     
     说句实话,你想了多久??
     因为限时40分钟,另外两个题目估计只要10分钟。
     
     这是我回来后想出来的代码。
     public void printTree()
            {
             class TestNode
             {
             public void printTree(Node node,int level)
             {
               for (int i=0;i<level;i++) System.out.print(" ");
             System.out.println(node.name);
             if (node.leftNode!=null)  printTree(node.leftNode,level+1);        
             if (node.rightNode!=null) printTree(node.rightNode,level+1);  
             }
             }
             new TestNode().printTree(root,0);
    }
    //当时只想到了改变接口会好做的多,但没有想到 可以在函数内构建一个内部类,再加以调用。
      

  5.   

    to : linux_328(企鹅):果然厉害!程序的关键就在:
    private void print(Node n){
          if(n==null)
          return;
          for(int i=0;i<count;i++)
         System.out.print(' ');
         System.out.println(n.name);
         count++;
         print(n.leftNode);
         print(n.rightNode);
         count--;
          }
    不要揍我!................我知道你们也看出来了这个关键...........嘿嘿
      

  6.   

    linux_328(企鹅) 有没有 联系方法??我可以告诉你那个外资公司的名称,你看有没有兴趣??
      

  7.   

    我QQ:274119307
      邮箱:[email protected]
      

  8.   

    我一开始看题目时,以为不许增加方法,不许改变printTree()的定义,因此没有采用递归,写了一个比上面各位的方法都要复杂的算法,可能太苯了,但绝对忠实园题目,耗时就不用说了,惭愧2个小时,我已经很久没写代码了,基本思想和 linux_328(企鹅) 的很相似,如下,中间注释部分为一个4层的满树:
    import java.util.*;
     public class BinaryNode {        class Node
            {
                String name;
                Node leftNode;
                Node rightNode;
            }
            Node root;
            public void printTree(){
              int i=0,j;
              root=new Node();
              root.name="root";
              root.leftNode=new Node();
              root.rightNode=new Node();
              root.leftNode.name="node3";
              root.rightNode.name="node6";
              root.leftNode.leftNode=new Node();
              root.leftNode.leftNode.name="node4";
              root.rightNode.leftNode=new Node();
              root.rightNode.rightNode=new Node();
              root.rightNode.leftNode.name="node5";
              root.rightNode.rightNode.name="node7";
              /*
              root.leftNode=new Node();
              root.rightNode=new Node();
              root.leftNode.name="node1";
              root.rightNode.name="node2";
              root.leftNode.leftNode=new Node();
              root.leftNode.rightNode=new Node();
              root.leftNode.leftNode.name="node3";
              root.leftNode.rightNode.name="node4";
              root.rightNode.leftNode=new Node();
              root.rightNode.rightNode=new Node();
              root.rightNode.leftNode.name="node5";
              root.rightNode.rightNode.name="node6";
              root.leftNode.leftNode.leftNode=new Node();
              root.leftNode.leftNode.rightNode=new Node();
              root.leftNode.leftNode.leftNode.name="node7";
              root.leftNode.leftNode.rightNode.name="node8";
              root.leftNode.rightNode.leftNode=new Node();
              root.leftNode.rightNode.rightNode=new Node();
              root.leftNode.rightNode.leftNode.name="node9";
              root.leftNode.rightNode.rightNode.name="node10";
              root.rightNode.leftNode.leftNode=new Node();
              root.rightNode.leftNode.rightNode=new Node();
              root.rightNode.leftNode.leftNode.name="node7";
              root.rightNode.leftNode.rightNode.name="node8";
              root.rightNode.rightNode.leftNode=new Node();
              root.rightNode.rightNode.rightNode=new Node();
              root.rightNode.rightNode.leftNode.name="node9";
              root.rightNode.rightNode.rightNode.name="node10";
          */       
              Node current=root;
              Node parent=null;
              Stack stk = new Stack();
              String l_r="";//left or right
              String space="";
              down:
              for(;;){
                if(i==0) System.out.println(space+current.name);
                if(current.leftNode!=null&&i==0){
                  if(parent !=null){
                    stk.push(parent);
                    stk.push(l_r);
                    stk.push(space);}
                    parent=current;
                    l_r="left";
                    space+=" ";
                    current=parent.leftNode;
                    i=0;
                    continue;
                }
                else if(current.rightNode!=null){
                  if(parent !=null){
                    stk.push(parent);
                    stk.push(l_r);
                    stk.push(space);}
                    parent=current;
                    l_r="right";
                    space+=" ";
                    current=parent.rightNode;
                    i=0;
                    continue;
                }
                i=0;
                for(;;){              if(l_r=="left"){
                    current=parent;
                    if(!stk.empty()){
                      space = (String) stk.pop();
                      l_r = (String) stk.pop();
                      parent = (Node) stk.pop();
                      i = 1;
                    }
                    else {
                      space ="";
                      l_r="";
                      parent=null;
                      i=1;
                    }
                    continue down;
                  }
                  else{
                    current=parent;
                    if(!stk.empty()){
                      space = (String) stk.pop();
                      l_r = (String) stk.pop();
                      parent = (Node) stk.pop();
                      i = 1;
                    continue;
                    }
                    else return;
                  }
                }
              }
            }
            public static void main(String args[]){
              BinaryNode bnode=new BinaryNode();
              bnode.printTree();
       }}
      

  9.   

    linux_328(企鹅)写得非递归算法令人佩服,希望以后多交流
      

  10.   

    回复人: farmworker2000() ( ) 信誉:100  2005-4-9 22:58:23  得分: 0  
     
     
       
    linux_328(企鹅)写得非递归算法令人佩服,希望以后多交流是的,数据结构(java版)就有这个题,与c语言版类似,先序遍历.不是太难把.