例如,我有这个节点类:
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:对不起我的英文。
答案 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;
}
}