Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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_Data Structures_Binary Tree - Fatal编程技术网

Java 打印二叉树中没有兄弟节点的所有节点?

Java 打印二叉树中没有兄弟节点的所有节点?,java,data-structures,binary-tree,Java,Data Structures,Binary Tree,同级节点是具有相同父节点的节点。在二叉树中,最多可以有一个兄弟。不应打印Root,因为Root不能有同级 我已经为此编写了代码,它在我迄今为止使用的所有测试用例中都运行良好,但当我试图在online judge中提交它时,大多数用例都出现了错误。虽然我已经尽了最大的努力去找出它是什么,但我还是无法找出它可能是什么。我也不能为那个特定的测试用例进行试运行,因为我没有访问它们的权限 public static void printNodesWithoutSibling(BinaryTreeNode&

同级节点是具有相同父节点的节点。在二叉树中,最多可以有一个兄弟。不应打印Root,因为Root不能有同级

我已经为此编写了代码,它在我迄今为止使用的所有测试用例中都运行良好,但当我试图在online judge中提交它时,大多数用例都出现了错误。虽然我已经尽了最大的努力去找出它是什么,但我还是无法找出它可能是什么。我也不能为那个特定的测试用例进行试运行,因为我没有访问它们的权限

public static void printNodesWithoutSibling(BinaryTreeNode<Integer> root) {

        if(root==null)
        return;


        printNodesWithoutSibling(root.left); 
        printNodesWithoutSibling(root.right);

        if(root.right==null && root.left!=null)
        {
            System.out.print(root.left.data+" ");
            return;
        }



        else if(root.left==null && root.right!=null)
        {

            System.out.print(root.right.data+" ");
            return;
        }
}
publicstaticvoidprintNodeswithoutsibling(二进制树节点根){
if(root==null)
返回;
打印不带边框的节点(root.left);
打印不带边框的节点(root.right);
if(root.right==null&&root.left!=null)
{
System.out.print(root.left.data+“”);
返回;
}
else if(root.left==null&&root.right!=null)
{
System.out.print(root.right.data+“”);
返回;
}
}

您的代码没有考虑到没有右同胞的左子女的情况

确定节点是否有同级节点所需的知识位于其父节点中

下面的代码片段按预排序打印没有同级的节点。你可以很容易地修改它,如果你需要它的顺序或后序。代码是用C++编写的,但是我认为在java

中重构不会有任何问题。
void print_nodes_without_sibling(Node * root, bool no_sibling = false)
{
  if (root == nullptr)
    return;

  if (no_sibling)
    cout << root->key << endl;

  print_nodes_without_sibling(root->left,
                              root->left != nullptr and root->right != nullptr);
  print_nodes_without_sibling(root->right,
                              root->left != nullptr and root->right != nullptr);
}
void打印没有兄弟节点的节点(节点*根,布尔无兄弟节点=false)
{
if(root==nullptr)
返回;
如果(没有兄弟姐妹)
不能按左键,
根->左!=nullptr和根->右!=nullptr);
打印没有兄弟节点的节点(根->右),
根->左!=nullptr和根->右!=nullptr);
}

您的代码没有考虑到没有右同胞的左子女的情况

确定节点是否有同级节点所需的知识位于其父节点中

下面的代码片段按预排序打印没有同级的节点。你可以很容易地修改它,如果你需要它的顺序或后序。代码是用C++编写的,但是我认为在java

中重构不会有任何问题。
void print_nodes_without_sibling(Node * root, bool no_sibling = false)
{
  if (root == nullptr)
    return;

  if (no_sibling)
    cout << root->key << endl;

  print_nodes_without_sibling(root->left,
                              root->left != nullptr and root->right != nullptr);
  print_nodes_without_sibling(root->right,
                              root->left != nullptr and root->right != nullptr);
}
void打印没有兄弟节点的节点(节点*根,布尔无兄弟节点=false)
{
if(root==nullptr)
返回;
如果(没有兄弟姐妹)
不能按左键,
根->左!=nullptr和根->右!=nullptr);
打印没有兄弟节点的节点(根->右),
根->左!=nullptr和根->右!=nullptr);
}

对于您的教授或TAI来说,这听起来是个不错的问题。是否至少有一个样本预期输出?代码总是添加一个空格。即使对于最后一个节点,这也是可以接受的吗?是的,给定的测试用例中有4个运行良好,但其他5个则不能,这可能取决于预期的遍历。您的代码对每个节点所做的是打印左子树中的“没有兄弟节点的节点”,然后打印右子树中的节点,如果当前节点没有兄弟节点,则最终打印当前节点的一个子节点。可能预期的结果是在遍历过程中遇到“没有兄弟节点的节点”时立即打印出来。你试过把if/else放在两个递归调用之前吗?@Onheiron是的,我已经试过了,我也试过了,先往右走,然后往左走,但我得到了同样的结果。对你的教授或TAI来说,这是一个很好的问题。至少有一个样本预期输出吗?代码总是添加一个空格。即使对于最后一个节点,这也是可以接受的吗?是的,给定的测试用例中有4个运行良好,但其他5个则不能,这可能取决于预期的遍历。您的代码对每个节点所做的是打印左子树中的“没有兄弟节点的节点”,然后打印右子树中的节点,如果当前节点没有兄弟节点,则最终打印当前节点的一个子节点。可能预期的结果是在遍历过程中遇到“没有兄弟节点的节点”时立即打印出来。你试过把if/else放在两个递归调用之前吗?@Onheiron是的,我已经试过了,我也试过先向右,然后向左,但我得到了相同的结果