返回

Leaf-Similar Trees:PHP算法简洁易懂!

见解分享

LeetCode题库中,872. Leaf-Similar Trees这道题意简明,但其求解思路却蕴藏着算法的精妙之处。本文将基于PHP语言,深入剖析这道题目的解法,并用简洁易懂的代码实现,帮助你轻松掌握解题技巧。

什么是叶相似的树?

在二叉树中,叶节点是没有任何子节点的节点。叶相似的树是指一棵二叉树,其左子树的后继节点之和等于右子树的后继节点之和。例如,以下二叉树为叶相似的树:

    1
   / \
  2   3
 / \
4   5

因为左子树的后继节点之和为4+5=9,右子树的后继节点之和也为9。

PHP解法

我们使用PHP的递归函数来遍历二叉树,并计算每个子树的后继节点之和。以下是代码实现:

<?php

function isLeafSimilar($root) {
    if ($root === null) {
        return true;
    }

    $leftSum = getLeafSum($root->left);
    $rightSum = getLeafSum($root->right);

    return $leftSum == $rightSum;
}

function getLeafSum($node) {
    if ($node === null) {
        return 0;
    }

    if ($node->left === null && $node->right === null) {
        return 1;
    }

    return getLeafSum($node->left) + getLeafSum($node->right);
}

代码详解

  • isLeafSimilar()函数:递归地判断给定二叉树是否为叶相似的树。
  • getLeafSum()函数:递归地计算给定子树的后继节点之和。

时间复杂度

该算法的时间复杂度为O(n),其中n为二叉树中的节点数。因为我们遍历了二叉树中的每个节点一次,并且在每个节点上进行了常数时间的操作。

空间复杂度

该算法的空间复杂度为O(h),其中h为二叉树的高度。因为递归调用最多有h层,并且每个调用都使用常数空间。

总结

这道题目的解法巧妙地利用了递归,通过遍历二叉树并计算每个子树的后继节点之和,我们可以高效地判断给定二叉树是否为叶相似的树。本文提供的PHP解法清晰易懂,有助于读者理解解题思路并掌握算法技巧。