兄弟节点是具有相同父节点的节点。在二叉树中,最多只能有一个兄弟。 Root不应该以root身份打印,也不能有兄弟。
我已经为此编写了代码,该代码在我目前使用的所有测试用例中都运行良好但是当我尝试在网上判断它时,大多数情况都出错了。虽然我已经尽力弄明白它是什么,但我无法弄清楚可能是什么错误。此外,我无法为特定的测试用例进行干运,因为我无法访问它们。
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;
}
}
答案 0 :(得分:0)
您的代码没有考虑没有正确兄弟的左子女的情况。
确定节点是否有兄弟节点所需的知识在其父节点中。
以下代码段以预先的顺序打印没有兄弟节点的节点。您可以轻松修改它是您需要的顺序或后序。代码是用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);
}