0

我嘗試通過BFS(寬度優先搜索)打印存儲在二叉樹內的數據時遇到了一些問題,所以,這是我的代碼:如何使用以下代碼在二叉樹中實現BFS?

BTree類僅用於插入數據,允許BTNode類執行遞歸過程。

public class BTree { 
BTNode root; 

public void insertAtTree(int data){ 
    if (root == null) root = new BTNode(data); 
    else root.insertAtTree(data); 
    } 
} 

類BTNode遞歸構造樹並打印每個DFS表單。

public class BTNode { 
int data; 
BTNode right; 
BTNode left; 

public BTNode(int data){ 
    this.data = data; 
} 

public void insertAtTree(int data){ 
    if (data <= this.data){ 
     if (left == null) left = new BTNode(data); 
     else left.insertAtTree(data); 
    } 
    else{ 
     if(right == null) right = new BTNode(data); 
     else right.insertAtTree(data); 
    } 
} 

public void printInorden(){ 
    if (left != null) left.printInorden(); 
    System.out.print(data+" "); 
    if (right != null) right.printInorden(); 
} 

public void printPreorden(){ 
    System.out.print(data+" "); 
    if (left != null) left.printPreorden(); 
    if (right != null) right.printPreorden(); 
} 

public void printPostorden(){ 
    if (left != null) left.printPostorden(); 
    if (right != null) right.printPostorden(); 
    System.out.print(data+" "); 
} 
} 

感謝您的幫助!

+0

當你說你「遇到一些問題?」時會發生什麼? – Foggzie 2014-09-27 00:19:56

回答

0

這是您的二叉樹的BFS代碼。

public void funcBFS(BTNode root){ 

if (root == null) 
    return; 

Queue<BTNode> q = new Queue<BTNode>(); 
q.enqueue(root); 

while(!q.isEmpty()){ 
    BTNode n = q.dequeue(); 
    System.out.print(n.data+" "); 
    if(n.left != null) 
     q.enqueue(n.left); 
    if(n.right != null) 
     q.enqueue(n.right); 
} 
}