2017-07-18 125 views
2

目前,我的二叉搜索樹主代碼如下所示:序遍歷混亂

public void add(int value) { 
    overallRoot = add(overallRoot, value); 
} 
private IntTreeNode add(IntTreeNode root, int value) { 
    if(root == null){ 
     root = new IntTreeNode(value); 
    } else if (value <= root.data){ 
     root.left = add(root.left, value); 
    } else { 
     root.right = add(root.right, value); 
    } 
    return root; 
} 
public void print() { 
    printInorder(overallRoot); 
    System.out.println(); 
} 

private void printInorder(IntTreeNode root) { 
    if(root != null) { 
     printInorder(root.left); 
     System.out.print(root.data + " "); 
     printInorder(root.right); 
    } 
} 

按下列順序插入的42,9,18,55,7,108,4,70,203,15值, 我可以在打印方式方法的幫助下打印出如下所示的樹。

  203 
     108 
      70 
    55 
42 
     18 
      15 
    9 
     7 
      4 

現在,當我打電話tree.print(),應在序遍歷打印,其打印出4,7,9,15,18,42,55,70,108,203 但是當我做手動遍歷,我得到4,7,15,9,18,42,55,70,108,203

我敢肯定,手動進行inorder遍歷產生了正確的值 但爲什麼程序打印出不同的價值?

+0

您可以在左節點中輸入所有內容,然後輸入數據,然後在右節點中輸入所有內容。如果你有一個正確構造的二叉樹,這不能做任何事情,只能按升序打印所有的數據值。也就是說,你正在用手不正確地做。 – Phylogenesis

+0

謝謝,我剛剛意識到我15分支左邊的是18而不是右邊的分支7 ;;; – jose

+0

是的,它只能分支到'9'的右邊或'18'的左邊,否則樹本身就會不正確。 – Phylogenesis

回答

0

您的tree.print()方法會正確執行指令行程。這種打印方式方法的結果不正確。你確定你是按照你給我們的順序插入數字的嗎?如果是這樣,resultt應該像

  -18 
    -9  -42  
-7  -15   -55 

-4 -108 -70 -203

,因此,輸出應爲4,7,9,15,18,42, 55,70,108,203