Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在二叉树中寻找非叶_Java_Binary Tree - Fatal编程技术网

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))

我正在尝试创建一个二叉树,并尝试在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; 
      } 

您需要对树进行完整的遍历深度优先递归遍历可能是最容易实现的,并且在每个节点上检查它是否有子节点。
至少有一个子节点的节点算作非叶。

树由节点对象组成。在每个节点对象中保存有关子节点的信息。 节点左子节点;和节点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在二叉树中查找客户端?请参阅我更新的答案。这是我编写的方法的名称。从同一方法中调用它称为递归。