最优雅的isEmpty()方法用于二叉树

时间:2017-03-29 15:29:29

标签: java is-empty

我试图为我的LinkedBinaryTree类编写最优雅的isEmpty()方法。

当编译器与if语句交互时,它应该返回一个布尔值,或者返回true为false。但是,由于必须在if语句外面返回值 ,因此我返回了false值。我的逻辑是if(count == 0),isEmpty()返回true并且不会打扰第二行(返回false)。这是对的吗?

public class LinkedBinaryTree<T> implements BinaryTreeADT<T>
{
   protected int count;
   protected BinaryTreeNode<T> root; 

   /**
    * Creates an empty binary tree.
    */
   public LinkedBinaryTree() 
   {
      count = 0;
      root = null;
   }

   /**
    * Creates a binary tree with the specified element as its root.
    *
    * @param element  the element that will become the root of the new binary tree
    */
   public LinkedBinaryTree (T element) 
   {
      count = 1;
      root = new BinaryTreeNode<T> (element);
   }

   /**
    * Returns true if this binary tree is empty and false otherwise.
    *
    * @return  true if this binary tree is empty
    */
   public boolean isEmpty() 
   {
       if (count == 0);
       return false; 
   }

2 个答案:

答案 0 :(得分:2)

“这是对的吗?” - 你可以通过测试找出答案。我建议你这样做,理想情况是在jUnit测试中:

 @Test
 public void isEmpty_returns_true_for_empty_list() {
     LinkedBinaryTree tree = new LinkedBinaryTree();
     assertTrue(tree.isEmpty());
 }

...和非空树的类似测试。

“最优雅”?

我会选择其中一个:

public boolean isEmpty() {
   return count == 0;
}

...或者......或者......

public boolean isEmpty() {
   return root == null;
}

(您确定您的实施需要count变量吗?)

Java与C一样,允许您省略if语句中的大括号。一个共同的建议是永远不要省略大括号,因为这是混乱的原因。

你所写的内容相当于:

 if(count == 0) {
 }
 return false;

所以它总是返回false。

你可以写:

 if(count == 0) {
    return true;
 }
 return false;

或没有大括号(不推荐):

 if(count == 0)
     return true;
 return false;

但由于这相当于return count == 0,因此使用if语句不够优雅。

答案 1 :(得分:0)

您可以在没有&#34; 的情况下返回您的条件,如果&#34;声明

public boolean isEmpty() {
   return (count == 0);

}