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



例如,我有这个节点类:

public class node{
int data
node left; /*For binary Tree*/
node right; /*For binary Tree*/
node next; /*For the linked list*/
public node(int d){
this.data=d;
this.left=null;
this.right=null;
this.next=null;
}

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

 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 方法将数据传递给链表。这是对的吗?是否可以将二叉树数据传递给具有相同节点类的链表?P.D:对不起我的英语。

从技术上讲,您可以使其工作:

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;
    }
}

最新更新