📜  检查二叉树是否完美的迭代方法(1)

📅  最后修改于: 2023-12-03 14:55:44.197000             🧑  作者: Mango

检查二叉树是否完美的迭代方法

在计算机科学中,二叉树是一种经常使用的数据结构。有时我们需要检查二叉树是否完美,即是否每个节点都有两个子节点。这篇文章将介绍一种迭代方法来检查二叉树是否完美。

算法

该算法使用前序遍历的迭代方法来检查二叉树是否完美。在前序遍历时,我们首先访问根节点,然后访问左子树,最后访问右子树。在访问每个节点时,我们需要检查它是否有两个子节点。如果节点为空,我们将其视为完美的节点,并将其加入到一个堆栈中。如果节点不为空,我们将其左右子节点加入到堆栈中,并继续遍历。如果遍历完成后,堆栈中没有剩余节点,则该二叉树是完美的。

以下是该算法的代码实现,使用Java语言实现:

public boolean isPerfect(TreeNode root) {
    if (root == null) {
        return true;
    }
    Stack<TreeNode> stack = new Stack<>();
    stack.push(root);
    while (!stack.isEmpty()) {
        TreeNode node = stack.pop();
        if (node.left == null && node.right == null) {
            continue;
        }
        if (node.left == null || node.right == null) {
            return false;
        }
        stack.push(node.left);
        stack.push(node.right);
    }
    return true;
}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}
分析

该算法使用了堆栈来实现迭代,因此空间复杂度为O(n),其中n为二叉树节点数。在最坏的情况下,二叉树可能是一个满二叉树,此时空间复杂度为O(2^h),其中h为二叉树的高度。时间复杂度为O(n),在最坏的情况下,需要遍历所有节点。因此在时间和空间上的性能都很不错。