以下给出递归和迭代两种实现方式
<?php
/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($val = 0, $left = null, $right = null) {
* $this->val = $val;
* $this->left = $left;
* $this->right = $right;
* }
* }
*/
class Solution {
/**
* @param TreeNode $root
* @return Boolean
*/
function isSymmetric($root) {
return $this->helper($root, $root);
}
public function helper($pNodeA, $pNodeB) {
if (is_null($pNodeA) && is_null($pNodeB)) {
return true;
}
if (is_null($pNodeA) || is_null($pNodeB)) {
return false;
}
return $pNodeA->val === $pNodeB->val &&
$this->helper($pNodeA->left, $pNodeB->right) &&
$this->helper($pNodeA->right, $pNodeB->left);
}
public function isSymmetric_iter($root) {
if (is_null($root)) {
return true;
}
$_Q = new SplQueue();
$_Q->enqueue($root);
$_Q->enqueue($root);
while(! $_Q->isEmpty()) {
$_nodeA = $_Q->dequeue();
$_nodeB = $_Q->dequeue();
if (!$_nodeA && !$_nodeB) {
continue;
}
if (!$_nodeA || !$_nodeB) {
return false;
}
if ($_nodeA->val !== $_nodeB->val) {
return false;
}
$_Q->enqueue($_nodeA->left);
$_Q->enqueue($_nodeB->right);
$_Q->enqueue($_nodeB->left);
$_Q->enqueue($_nodeA->right);
}
return true;
}
}