我正在尝试创建一个二叉树并尝试计算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;
}
答案 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)
你需要完全了解树(深度优先递归步行可能是最容易实现的)并且在每个节点检查它是否有任何子节点。 具有至少一个子节点的节点计为非叶子。