我可以使用相同的节点类来创建二叉树和链表吗?

时间:2017-05-13 01:17:27

标签: java

例如,我有这个节点类:

 Linkedlist list=new Linkedlist();
 public void InOrder(Node r){
  if(r!=null){
    InOrder(r.left);
    list.Addnode(r.data);  /*
    System.out.println(r.data);
    InOrder(r.right);
   }
  }

我想为二叉树创建所有节点,然后使用inorder遍历序列,最后将信息传递给链接列表。我有方法为二叉树工作创建所有节点。但我在inorder方法中有类似的东西:

failed to register layer: ApplyLayer exit status 1 stdout:  stderr: Container ID 110088952 cannot be mapped to a host ID.

我通过inorder方法将数据传递给linkedlist。它是否正确?可以将二叉树数据传递到具有相同节点类的链表吗? P.D:对不起我的英文。

1 个答案:

答案 0 :(得分:2)

从技术上讲,你可以让它发挥作用:

import java.util.Arrays;
import java.util.LinkedList;

public class Node{

    int data;
    Node left; /*For binary Tree*/
    Node right; /*For binary Tree*/
    Node next; /*For the linked list*/
    static LinkedList<Integer> list = new LinkedList<>();

    public Node(int d){

        data=d;
        left=null;
        right=null;
        next=null;
    }

    public void InOrder(Node r){

        if(r!=null){
            InOrder(r.left);
            list.add(r.data);
            InOrder(r.right);
        }
    }

    public static void main(String[] args) {

        Node[] nodes = new Node[10];

        for(int i=0; i < nodes.length ; i++) {

            nodes[i] = new Node(i*10);
            if(i>0) {
                nodes[i].left = nodes[i-1];
            }
        }

        //sort and add data to linked list
        nodes[nodes.length-1].InOrder(nodes[nodes.length-1]);
        System.out.println(Arrays.toString(list.toArray()));
    }
}

如您所见,结构和调用是奇怪的。 要创建节点的链接列表,您可以执行以下操作:

import java.util.LinkedList;

public class Tree{

    LinkedList<Node> list=new LinkedList<>();

    Tree(int numberOfNodes){

        if(numberOfNodes >0) {
            makeNodes(numberOfNodes);
        }

    }

    private void makeNodes(int numberOfNodes) {

        Node[] nodes = new Node[numberOfNodes];

        for(int i=0; i < nodes.length ; i++) {

            Node newNode = new Node(i*10);
            nodes[i] = newNode;

            if(i>0) {
                newNode.left = nodes[i-1];
                nodes[i-1].right = newNode;
            }

            list.add(newNode);
        }
    }

    public void printNodesData(){

        list.stream().forEach(e -> System.out.println(e.data));
    }

    public static void main(String[] args) {
         Tree tree = new Tree(10);
         tree.printNodesData();
    }
}

class Node{
    int data;
    Node left; /*For binary Tree*/
    Node right; /*For binary Tree*/
    Node next; /*For the linked list*/

    public Node(int d){

        data=d;
        left=null;
        right=null;
        next=null;
    }
}