2015-11-09 4 views
0

Это мой класс генерации FibonacciTree: У него есть методы для генерации бинарного дерева результатов функции Фибоначчи и дерева аргументов Фибоначчи. Но я не могу реализовать метод для создания дерева последовательностей вызовов, например:Реализация последовательности узлов дерева Фибоначчи

enter image description here

package dynamicdata; 

public class FiboTree { 

    int value; 
    FiboTree left; 
    FiboTree right; 

    FiboTree(int value, FiboTree left, FiboTree right) { 
     this.value = value; 
     this.left = left; 
     this.right = right; 
    } 

    static int getFiboVal(int val) { 

     return (val > 2) ? getFiboVal(val - 1) + getFiboVal(val - 2) : 1; 
    } 

    static FiboTree generateArg(int val) { 
     return (val > 1) ? new FiboTree(val, generateArg(val - 2), generateArg(val - 1)) : new FiboTree(val, null, null); 
    } 

    static FiboTree generateVal(int val){ 
     return (val > 2) ? new FiboTree(getFiboVal(val), generateVal(val - 2), generateVal(val - 1)) : new FiboTree(1, null, null); 
    } 

    static void print(FiboTree root, int depth) { 
     if(root != null) { 
      print(root.right, depth + 1); 
      for(int k = 0; k < depth; k++) { 
       System.out.print("  "); 
      } 
      System.out.println(root.value + "["); 
      print(root.left, depth + 1); 
     } 
    } 

    @Override 
    public String toString(){ 
     return getTreeToString(this); 
    } 

    String getTreeToString(FiboTree node){ 
     return (node != null) ? "[root: " + node.value + " left: " + getTreeToString(node.left) + " right: " + getTreeToString(node.right) 
       + "]": ""; 
    } 

    int getSize(FiboTree node) { 
     return (node != null) ? 1 + getSize(node.left) + getSize(node.right) : 0; 
    } 

    static FiboTree generateNum(int val) { 
     return genNumCount(val, val); 
    } 

    static FiboTree genNumCount(int val, int cnt) { 
    } 

    public static void main(String[] args) { 

      FiboTree tree = generateNum(5); 
      tree.print(tree, 0); 
    } 


} 

Спасибо заранее для любого решения! * p.s. метод, который я должен реализовать - «generateNum»

ответ

0

У меня есть продвижение в решении этой задачи:

static FibTree generateNum(int val) { 
     return genNumCount(val, val); 
    } 

    static FibTree genNumCount(int val, int nls) { 
     if (val > 1) { 
       FibTree rec = new FibTree(nls + 1, genNumCount(val - 1, nls + 1), new FibTree(val, null, null)); //genNumCount(val - 1, nls) 
       return rec; 
     } else { 
       return new FibTree(val, null, null); 
     } 
    } 

    public static void main(String[] args) { 
     FibTree tree = generateNum(4); 
     print(tree, 0); 
    } 

дерево счетчик работает в правильном направлении, но все же недостаточно. Нужно улучшить ссылку rec.right. Кто-нибудь может помочь?