2017-05-13 17 views
0

例如,我有這個節點類:我可以使用相同的節點類來創建一個二叉樹和一個鏈表嗎?

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

我想創建的所有節點的二叉樹,然後用中序遍歷序列,並最終將信息傳遞給一個LinkedList。我有方法來創建二叉樹工作的所有節點。但我有這樣的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:對不起,我的英語。

+1

我相信這是可能的。你爲什麼不嘗試,看看你是否遇到任何問題? –

+0

請發佈可編輯代碼。嘗試遵循Java命名約定。最佳使用[mcve]。從技術上講,你可以得到它的工作,但一個。結構和調用很奇怪。灣我們想要什麼? ***數據的鏈接列表***?或***節點的鏈接列表***?另外爲什麼要在每個節點上存儲一個鏈表? – c0der

回答

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; 
    } 
} 
相關問題