📜  门| GATE MOCK 2017 |问题23(1)

📅  最后修改于: 2023-12-03 15:12:39.465000             🧑  作者: Mango

题目23

这道题目需要我们考虑一个二叉树是否是一个完全二叉树。二叉树是由节点组成的集合,每个节点包含一个值,以及指向左子树和右子树的指针。

完全二叉树是一种特殊的二叉树,有以下特点:

  1. 所有的叶子节点都在最后一层或倒数第二层。
  2. 如果一个节点有右子树而没有左子树,那么该节点不是叶子节点。
  3. 如果一个节点有左子树而没有右子树,那么该节点的所有后继节点都不存在右子树。

这里有一个Python程序,可以判断一个二叉树是否是一个完全二叉树:

class Node:
    def __init__(self, val=None, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def isComplete(root):
    if not root:
        return True
    q = [root]
    canEnd = False
    while q:
        node = q.pop(0)
        if not node.left and node.right:
            return False
        if canEnd:
            if node.left or node.right:
                return False
        else:
            if not node.left and not node.right:
                canEnd = True
            elif not node.left and node.right:
                return False
            elif node.left and not node.right:
                canEnd = True
            else:
                q.append(node.left)
                q.append(node.right)
    return True

这个程序使用了广度优先搜索来遍历所有的节点,依次检查每个节点是否符合完全二叉树的定义。代码比较简单,但是要注意细节。

我们可以通过调用isComplete方法,传入我们的二叉树的根节点来判断该二叉树是否是完全二叉树。