2013-04-11 50 views
1

請在下面找到一個簡單的二叉搜索樹檢查代碼:我應該多長時間在二叉樹中添加條目?

class Tree { 

    int value; 
    Tree left; 
    Tree right; 

    public Tree (int a){ 

     value = a; 
     left = right = null; 
     } 

} 



public class VerifyBST { 



public static boolean ifBST(Tree myTree, int small , int large){ 

     if(myTree == null) 
      return true; 
     if(myTree.value > small && myTree.value < large){ 

     boolean leftBST = ifBST(myTree.left, small,myTree.value); 
     boolean rightBST = ifBST(myTree.right,myTree.value,large); 

     return leftBST&&rightBST; 
     } 
     else{ 

     return false; 
     } 

    } 

    public static void main(String[] args) { 
     /* 

       4 
      /\ 
       2 6  
      /\ /\ 
      1 3 5 7   */ 

     Tree myTree = new Tree(4); 

     myTree.left = new Tree(2); 
     myTree.right = new Tree(6); 

     myTree.left.left = new Tree(1); 
     myTree.left.right = new Tree(3); 

     myTree.right.left = new Tree(5); 
     myTree.right.right = new Tree(7); 



     System.out.println("BST or NOT?" + ifBST(myTree,Integer.MIN_VALUE,Integer.MAX_VALUE)); 




    } 

} 

我的問題:

  1. 從代碼作爲清楚,我手動輸入我的二叉樹的所有條目,所以如果有一種情況我需要檢查那些手動輸入不是好主意的大樹,那麼應該遵循什麼樣的最佳方法呢?

  2. 由於我在主要方法中通過了ifBST(myTree,Integer.MIN_VALUE,Integer.MAX_VALUE),這是否意味着Integer.MIN_VALUE = 1Integer.MAX_VALUE = 7被傳遞給方法體呢?

感謝

回答

1
  1. 的有效性。如果你想創建一個大的樹,我會建議你創建一個insertIntoTree(Tree node, int value)功能,增加了在適當的位置的新節點。然後,您可以根據需要多次調用該函數,可能是隨機生成的值。請注意,儘管您有可能以不平衡的BT結束,但仍然是BT。
  2. 不,它不會通過圖1和7到ifBST,它會通過對整數類型的最小和最大可能值 - 這可能是-2^31-1和2^31。
0

1)這聽起來像你想編寫一個附加功能。這是一個遍歷樹的函數,從根開始。如果您希望插入的值小於根節點,請輸入左側節點。如果它大於根節點,請輸入正確的節點。使用遞歸重複此操作,直到您要輸入的節點爲空。然後在該點創建一個新的樹節點,並將左側或右側的子節點設置爲該節點。

2)想想,使其成爲一個二叉搜索樹的條件。左邊的節點應該小於父節點,右邊的節點要大一些。利用這些條件,你將如何確保樹