Algorithm 给定的二叉树是否完整

Algorithm 给定的二叉树是否完整,algorithm,data-structures,Algorithm,Data Structures,给定一棵二叉树,编写一个函数来检查给定的二叉树是否是完整的二叉树 一个完整的二叉树是一个二叉树,在这个二叉树中,除了最后一个之外,所有的层次都被完全填充,所有的节点都尽可能的左移。资料来源: 我的方法是使用队列进行BFS,并计算节点数。经营 循环,直到队列不为null,但一旦找到 以下条件适用: 节点的左侧节点不存在 左侧节点存在,但右侧节点不存在 现在我们可以比较从上述方法得到的计数和 树中节点的原始计数。如果两者相等,那么 完成二叉树,否则不会 请告诉我这个方法是否正确。谢谢 这个问题和我们

给定一棵二叉树,编写一个函数来检查给定的二叉树是否是完整的二叉树

一个完整的二叉树是一个二叉树,在这个二叉树中,除了最后一个之外,所有的层次都被完全填充,所有的节点都尽可能的左移。资料来源:

我的方法是使用队列进行BFS,并计算节点数。经营 循环,直到队列不为null,但一旦找到 以下条件适用:

  • 节点的左侧节点不存在
  • 左侧节点存在,但右侧节点不存在
  • 现在我们可以比较从上述方法得到的计数和 树中节点的原始计数。如果两者相等,那么 完成二叉树,否则不会

    请告诉我这个方法是否正确。谢谢

    这个问题和我们的问题是一样的。但我想在这里验证我的方法

    编辑:
    下面的@Boris Strandjev验证了该算法。我觉得这是在网络上可用的一些算法中最容易实现的算法。如果您不同意我的断言,请真诚道歉。

    您的算法应该可以解决问题


    使用BFS所做的工作完全等同于绘制树,然后用手指从上到下和从左到右跟踪节点。当你第一次无法继续时,你就停止用手指追踪。如果您没有计算所有节点,那么结构显然不符合预期。

    @RahulTripathi感谢您的链接。但我想在这里验证我的算法。你能帮我吗?你怎么/什么时候计算节点数?你甚至不需要计算节点数,只要看看你是到了树的末尾还是提前终止就可以了。计数与算法本身类似,但似乎没有必要。请注意,您必须对推入队列的节点进行计数,并且在将节点的子节点推入队列后必须检查这些条件。感谢您的回复。但我的代码将为此返回正确的结果。假设队列是q。现在听你的意见。q将有1,然后弹出1并推左子2和右子3。现在流行2,2将不会离开孩子,所以打破。现在我们将得到计数3,但最初树有5,因此二叉树是不完整的。如果我错了,请纠正我。@trying:对不起,我误解了你的算法,我正在对它进行重复,将在2-3分钟内反馈。@trying。你是说我的算法会像现在这样工作吗?请遵守。“无论如何,谢谢你的努力。”我确认。您的算法将按原样工作。我在答复中解释了原因。