在二叉树中查找非叶子

时间:2014-02-14 11:33:26

标签: java binary-tree

我正在尝试创建一个二叉树并尝试计算Java中的非叶子。我怎样才能找到非叶子的数量?有什么建议吗? 这是我的代码的一部分:

      public int no_leaves() 
        { BTNode<Integer> n = root; 
         int count=0; 
        while(n!=null ) 
        { 
        if((n.right==null)&& (n.left==null)) 
        {continue; 

        } 
        else
        { 
          count++; 
        } 
        } 
       System.out.println(count); 
      return count; 
      } 

2 个答案:

答案 0 :(得分:2)

树由节点对象组成。在每个节点对象中,您可以保存有关子项的信息。 Node leftChild;Node rightChild;。如果其中任何一个不为null,则表示您有一个内部节点。

编辑: 遍历二叉树有三种可能性。预订,以后订购。

预购:使用您的Node执行某些操作,然后检查左子树(使用leftChild调用相同的方法),然后检查右侧子树。

Inorder:对于每个节点(recursivly),从LeftChild开始,然后对节点执行某些操作,然后使用rightChild进行循环。

后序:对于每个节点(递归),从leftChild开始,然后转到右侧,最后对您的节点执行某些操作。

例如在前序遍历中:

    public int countLeaves(Node node) {
      if(node.left == null && node.right == null) {
       //this is a leaveNode; no more method calls to countLeaves
      } else {
         // this is not a leaveNode, check subtrees.
         // call countLeaves() with the children of node
      }
    }

答案 1 :(得分:0)

你需要完全了解树(深度优先递归步行可能是最容易实现的)并且在每个节点检查它是否有任何子节点。 具有至少一个子节点的节点计为非叶子。