Java 在二叉树中寻找非叶
我正在尝试创建一个二叉树,并尝试在Java中计算非叶数。如何找到非树叶的数量?有什么建议吗? 以下是我代码的一部分:Java 在二叉树中寻找非叶,java,binary-tree,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))
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;
}
您需要对树进行完整的遍历深度优先递归遍历可能是最容易实现的,并且在每个节点上检查它是否有子节点。
至少有一个子节点的节点算作非叶。树由节点对象组成。在每个节点对象中保存有关子节点的信息。 节点左子节点;和节点rightChild;。如果其中任何一个不为null,则有一个内部节点 编辑: 遍历二叉树有三种可能性。先订购,后订购 预排序:对节点执行一些操作,然后检查左子树,使用leftChild调用相同的方法,然后检查右子树 顺序:对于每个节点,递归地从LeftChild开始,然后对节点执行一些操作,然后继续对rightChild执行操作 Postorder:对于每个节点,大致从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
}
}
执行某种递归树遍历,只计算那些节点,这些节点有非叶子的子节点。执行任何类型的树遍历Post、pre、in。保持一个静态计数器。如果给定节点的左或右节点存在,则递增该值。您知道如何搜索所有节点吗?您知道如何检查节点是否为左节点吗?你尝试过什么,有什么困难?@AniketThakur静态计数器不会非常线程安全。您可以返回找到的节点数。不,我只是在用java创建一个二叉树。我知道我必须使用递归函数,但我不知道如何…以及如何使用java在二叉树中查找客户端?请参阅我更新的答案。这是我编写的方法的名称。从同一方法中调用它称为递归。