2016-11-23 1 views
0

Я новичок в стек, поток очень жаль за любые ошибки, но я пытаюсь ответить на этот вопрос:Двойное слияние дерева?

«Написать метод, который принимает два бинарных деревьев t1, t2 и бинарное дерево узла V в качестве аргументов. Он создает и возвращает новое двоичное дерево, у которого v есть его корень, а левое поддерево - t1, а правое поддерево - t2. "

Я делал часы попыток и не мог даже сделать 1 двоичное дерево. Учитель обыкновенно не объясняет и не хочет, чтобы мы делали это с помощью объектов. Это формат, она хочет, чтобы использовать .. Может кто-то пожалуйста, помогите мне ..

комментируемых вне вещей только мои попытки получить что-то, чтобы работать ..

public class treeNode 
{ 
    private Object da; 
    private treeNode left; 
    private treeNode right; 
    public treeNode(Object newItem) 
    { 
     da = newItem; 
     left = null; 
     right = null; 
    } 
    public treeNode(Object newItem, treeNode leftNode, treeNode rightNode) 
    { 
     da = newItem; 
     left = leftNode; 
     right = rightNode; 
    } 

    public void setItem(Object newItem) 
    { 
     da = newItem; 
    } 
    public Object getItem() 
    { 
     return da; 
    } 
    public void setLeft(treeNode leftNode) 
    { 
     left = leftNode; 
    } 
    public treeNode getLeft() 
    { 
     return left; 
    } 
    public void setRight(treeNode rightNode) 
    { 
     right = rightNode; 
    } 
    public treeNode getRight() 
    { 
     return right; 
    } 
    //------------------------ 

    public void buildTree() 
    { 

    } 
    //public void combine (l , r) 
    //{ 
    // T = 5; 
    // setLeft(l); 
    // setRight(r); 
    // return T; 
    //} 
    //----------------------- 
    public static void main (String args []) 
    { 
     // treeNode a = new treeNode(5); 
     // treeNode b = new treeNode(8); 
     // treeNode c = new treeNode(2); 

     // a.setLeft(b); 
     // a.setRight(c); 

     // System.out.println(a.da); 
     // System.out.println(a.getLeft()); 
     // System.out.println(a.getRight()); 



//  treeNode t = new treeNode(); 
//  t.left = t1; 
//  t.right = t2; 
//  System.out.println(buildTree(t)); 

    } 
} 
+0

Просто сделать некоторые случайные деревья t1 и t2. Комбинация здесь тривиальна, так как не требуется прибегать к вещам. (например: 'TreeNode v = new TreeNode (10, t1, t2)') – GoneUp

+1

Woops. Неправильно. Вам нужно сделать способ. Итак, в основном, что вы делали с комбайном, просто добавьте параметр TreeNode v и выполните setleft и setRight v v. – GoneUp

ответ

0

Мое решение состоит из двух классов : Дерево и узел. Решение может быть реализовано только с помощью Node, но так как вас попросили, чтобы функция получила два дерева и узел, поэтому я реализовал его так. Я не знаю, знаете ли вы java generics («T», который я использовал), если вы этого не сделаете, вы можете использовать Object как код, который вы опубликовали. Я игнорирую всех геттеров и сеттеров, но, конечно, вы можете их добавить.

Node Класс:

public class Node<T> { 
    private T data; 
    private Node right; 
    private Node left; 

    public Node(T data) { 
     this.data = data; 
    } 

    public Node(T data, Node right, Node left) { 
     this.data = data; 
     this.right = right; 
     this.left = left; 
    } 
} 

Дерево Класс:

public class Tree<T> { 
    private Node<T> root; 

    public Tree(Node root) { 
     this.root = root; 
    } 

    public Node<T> getRoot() { 
     return root; 
    } 
} 

Комбайн функцию:

public Tree combine(Tree t1, Tree t2, Node v) { 
    return new Tree(new Node(v, t1.getRoot(), t2.getRoot())); 
}