php怎么看二叉树对称

worktile 其他 54

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    要判断一个二叉树是否为对称二叉树,可以使用递归的方法。具体步骤如下:

    1. 首先,先编写一个辅助函数`isMirror()`,该函数接受两个节点作为参数,用于判断两个节点是否对称。

    2. 在`isMirror()`函数中,首先判断两个节点是否同时为空,如果是,则返回`True`。

    3. 然后,判断两个节点是否有一个为空,如果是,则返回`False`。

    4. 接下来,判断两个节点的值是否相等,如果不相等,则返回`False`。

    5. 最后,递归地判断左节点的左子树与右节点的右子树是否对称,以及左节点的右子树与右节点的左子树是否对称,如果都对称,则返回`True`;否则返回`False`。

    下面是使用PHP实现的示例代码:

    “`php
    class TreeNode {
    public $val;
    public $left;
    public $right;

    function __construct($val = 0, $left = null, $right = null) {
    $this->val = $val;
    $this->left = $left;
    $this->right = $right;
    }
    }

    function isSymmetric($root) {
    if ($root == null) {
    return true;
    }
    return isMirror($root->left, $root->right);
    }

    function isMirror($node1, $node2) {
    if ($node1 == null && $node2 == null) {
    return true;
    }
    if ($node1 == null || $node2 == null) {
    return false;
    }
    return ($node1->val == $node2->val)
    && isMirror($node1->left, $node2->right)
    && isMirror($node1->right, $node2->left);
    }
    “`

    通过调用`isSymmetric()`函数,可以判断给定的二叉树是否对称。如果返回值为`True`,则表示二叉树对称;如果返回值为`False`,则表示二叉树不对称。

    2年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    要判断一个二叉树是否对称,可以采用递归和迭代两种方法。

    方法一:递归法
    递归法是通过比较镜像位置节点的值来判断二叉树是否对称。首先将根节点的左右子树传入递归函数,再比较左右子树的值是否相等,如果相等,则递归比较左子树的左节点和右子树的右节点,以及左子树的右节点和右子树的左节点。如果所有的节点都满足这个条件,则说明二叉树对称。

    具体步骤如下:
    1. 定义一个递归函数 `isSymmetricHelper()` 来判断两个节点是否镜像对称。
    2. 在 `isSymmetric()` 函数中判断根节点是否为空,若为空则返回 `true`,否则调用 `isSymmetricHelper()` 函数。
    3. 在 `isSymmetricHelper()` 函数中判断两个节点 `left` 和 `right` 是否为空,若同时为空则返回 `true`,若其中一个为空则返回 `false`。
    4. 判断 `left` 和 `right` 节点的值是否相等,若不相等则返回 `false`。
    5. 递归调用 `isSymmetricHelper()` 函数,比较 `left` 的左子节点和 `right` 的右子节点,以及 `left` 的右子节点和 `right` 的左子节点。

    示例代码如下:

    “`php
    class TreeNode {
    public $val;
    public $left;
    public $right;

    function __construct($val = 0, $left = null, $right = null) {
    $this->val = $val;
    $this->left = $left;
    $this->right = $right;
    }
    }

    function isSymmetric($root) {
    if ($root == null) {
    return true;
    }
    return isSymmetricHelper($root->left, $root->right);
    }

    function isSymmetricHelper($left, $right) {
    if ($left == null && $right == null) {
    return true;
    }
    if ($left == null || $right == null) {
    return false;
    }
    if ($left->val != $right->val) {
    return false;
    }
    return isSymmetricHelper($left->left, $right->right) && isSymmetricHelper($left->right, $right->left);
    }

    // 测试用例
    $root = new TreeNode(1);
    $root->left = new TreeNode(2);
    $root->right = new TreeNode(2);
    $root->left->left = new TreeNode(3);
    $root->left->right = new TreeNode(4);
    $root->right->left = new TreeNode(4);
    $root->right->right = new TreeNode(3);

    $result = isSymmetric($root);
    if ($result) {
    echo “二叉树是对称的”;
    } else {
    echo “二叉树不是对称的”;
    }

    “`

    方法二:迭代法
    迭代法是通过辅助数据结构(例如队列)来判断二叉树是否对称。首先将根节点的左右子节点入队列,在每一轮的迭代中,取出队列中的两个节点进行比较,若值不相等则直接返回 `false`,否则将它们的左右子节点按相反顺序入队列。当队列为空时,说明二叉树对称。

    具体步骤如下:
    1. 定义一个队列,并将根节点的左右子节点入队列。
    2. 迭代队列,每次取出两个节点进行比较。
    3. 比较节点的值,若不相等则返回 `false`。
    4. 将两个节点的左右子节点按相反顺序入队列。
    5. 重复步骤2-4,直到队列为空。

    示例代码如下:

    “`php
    class TreeNode {
    public $val;
    public $left;
    public $right;

    function __construct($val = 0, $left = null, $right = null) {
    $this->val = $val;
    $this->left = $left;
    $this->right = $right;
    }
    }

    function isSymmetric($root) {
    if ($root == null) {
    return true;
    }
    $queue = [];
    array_push($queue, $root->left, $root->right);
    while (!empty($queue)) {
    $left = array_shift($queue);
    $right = array_shift($queue);
    if ($left == null && $right == null) {
    continue;
    }
    if ($left == null || $right == null || $left->val != $right->val) {
    return false;
    }
    array_push($queue, $left->left, $right->right);
    array_push($queue, $left->right, $right->left);
    }
    return true;
    }

    // 测试用例
    $root = new TreeNode(1);
    $root->left = new TreeNode(2);
    $root->right = new TreeNode(2);
    $root->left->left = new TreeNode(3);
    $root->left->right = new TreeNode(4);
    $root->right->left = new TreeNode(4);
    $root->right->right = new TreeNode(3);

    $result = isSymmetric($root);
    if ($result) {
    echo “二叉树是对称的”;
    } else {
    echo “二叉树不是对称的”;
    }
    “`

    以上就是判断二叉树是否对称的两种方法,分别是递归法和迭代法。可以根据实际情况选择使用哪种方法来解决问题。

    2年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    要判断一棵二叉树是否对称,可以使用递归的方式进行判断。递归的思路是比较根节点的左子树和右子树是否对称,同时比较左子树的左子树和右子树的右子树、左子树的右子树和右子树的左子树是否对称。下面是具体的操作步骤:

    1. 编写一个递归函数`isSymmetricHelper($left, $right)`,该函数用于判断以左右两个节点为根节点的子树是否对称。函数的返回值为布尔值,表示子树是否对称。

    2. 在`isSymmetricHelper`函数中,首先判断左节点和右节点是否同时为空,如果是,则表明子树对称,返回`true`。

    3. 然后判断左节点和右节点是否有一个为空,或者两个节点的值不相等,如果是,则表明子树不对称,返回`false`。

    4. 如果左节点和右节点都不为空,且两个节点的值相等,则继续递归判断左节点的左子树和右节点的右子树是否对称,以及左节点的右子树和右节点的左子树是否对称。如果两个子树都对称,则返回`true`,否则返回`false`。

    5. 最后,在主函数中调用`isSymmetricHelper`函数,传入二叉树的根节点,即可判断整棵二叉树是否对称。

    下面是一个使用PHP语言实现的例子:

    “`php
    class TreeNode {
    public $val;
    public $left;
    public $right;

    public function __construct($val = 0, $left = null, $right = null) {
    $this->val = $val;
    $this->left = $left;
    $this->right = $right;
    }
    }

    function isSymmetric($root) {
    if ($root == null) {
    return true;
    }
    return isSymmetricHelper($root->left, $root->right);
    }

    function isSymmetricHelper($left, $right) {
    if ($left == null && $right == null) {
    return true;
    }
    if ($left == null || $right == null || $left->val != $right->val) {
    return false;
    }
    return isSymmetricHelper($left->left, $right->right) && isSymmetricHelper($left->right, $right->left);
    }

    // 测试
    $root = new TreeNode(1);
    $root->left = new TreeNode(2);
    $root->right = new TreeNode(2);
    $root->left->left = new TreeNode(3);
    $root->left->right = new TreeNode(4);
    $root->right->left = new TreeNode(4);
    $root->right->right = new TreeNode(3);

    if (isSymmetric($root)) {
    echo “二叉树是对称的”;
    } else {
    echo “二叉树不是对称的”;
    }
    “`

    以上代码中,我们创建了一个`TreeNode`类来表示二叉树的节点。然后定义了`isSymmetric`函数和`isSymmetricHelper`函数,并在主函数中调用`isSymmetric`函数进行测试。

    注意:上述代码是基于leetcode题目101. 对称二叉树的要求所写的。如需应用于其他题目或场景,请根据实际情况进行相应的调整。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部