php二叉树镜像怎么弄
-
要实现二叉树的镜像,可以通过递归的方法来实现。具体步骤如下:
1. 首先,判断二叉树是否为空。若为空,则直接返回空。
2. 其次,交换二叉树的左右子树。即将当前节点的左子树与右子树互换。
3. 然后,对左子树和右子树分别进行递归调用,对它们进行镜像操作。
下面是一个 PHP 实现二叉树镜像的示例代码:
“`php
class TreeNode {
public $val;
public $left = null;
public $right = null;function __construct($val) {
$this->val = $val;
}
}function mirrorTree($root) {
if ($root == null) {
return null;
}// 交换左右子树
$temp = $root->left;
$root->left = $root->right;
$root->right = $temp;// 对左右子树分别进行镜像操作
mirrorTree($root->left);
mirrorTree($root->right);return $root;
}// 测试代码
$root = new TreeNode(1);
$root->left = new TreeNode(2);
$root->right = new TreeNode(3);
$root->left->left = new TreeNode(4);
$root->left->right = new TreeNode(5);$mirrorRoot = mirrorTree($root);
// 输出镜像后的二叉树
echo $mirrorRoot->val . “\n”; // 输出 1
echo $mirrorRoot->left->val . “\n”; // 输出 3
echo $mirrorRoot->right->val . “\n”; // 输出 2
echo $mirrorRoot->left->left->val . “\n”; // 输出 5
echo $mirrorRoot->left->right->val . “\n”; // 输出 4
“`以上代码通过递归的方式实现了二叉树的镜像,通过交换当前节点的左右子树,并对左右子树分别进行镜像操作,可以得到原二叉树的镜像。
2年前 -
在PHP中,可以通过递归的方式来实现二叉树的镜像。下面是一个实现二叉树镜像的PHP代码示例:
“`php
class Node {
public $data;
public $left;
public $right;public function __construct($data) {
$this->data = $data;
$this->left = null;
$this->right = null;
}
}function mirrorBinaryTree($node) {
if ($node === null) {
return;
}// 交换当前节点的左右子节点
$temp = $node->left;
$node->left = $node->right;
$node->right = $temp;// 递归处理左右子树
mirrorBinaryTree($node->left);
mirrorBinaryTree($node->right);
}// 创建一个二叉树
$root = new Node(1);
$root->left = new Node(2);
$root->right = new Node(3);
$root->left->left = new Node(4);
$root->left->right = new Node(5);
$root->right->left = new Node(6);
$root->right->right = new Node(7);// 输出原始二叉树的中序遍历结果
function inorderTraversal($node) {
if ($node !== null) {
inorderTraversal($node->left);
echo $node->data . ” “;
inorderTraversal($node->right);
}
}echo “原始二叉树的中序遍历结果:”;
inorderTraversal($root);
echo PHP_EOL;// 对二叉树进行镜像操作
mirrorBinaryTree($root);// 输出镜像后的二叉树的中序遍历结果
echo “镜像后的二叉树的中序遍历结果:”;
inorderTraversal($root);
echo PHP_EOL;
“`运行以上代码,结果输出为:
“`
原始二叉树的中序遍历结果:4 2 5 1 6 3 7
镜像后的二叉树的中序遍历结果:7 3 6 1 5 2 4
“`这段代码首先定义了一个`Node`类来表示二叉树的节点,包含节点的值`$data`以及左右子节点`$left`和`$right`。然后定义了一个`mirrorBinaryTree`函数来实现二叉树的镜像操作。
在`mirrorBinaryTree`函数中,首先判断当前节点是否为空,如果为空则直接返回。然后通过一个临时变量来交换当前节点的左右子节点。接下来,对当前节点的左右子树进行递归调用,分别对左右子树进行镜像操作。
最后,通过创建一个示例的二叉树,并输出原始二叉树的中序遍历结果。然后调用`mirrorBinaryTree`函数进行镜像操作,并输出镜像后的二叉树的中序遍历结果。可以看到,镜像后的二叉树的中序遍历结果与原始二叉树的遍历结果相反。
2年前 -
一、什么是二叉树?
二叉树是一种常见的数据结构,它由一个根节点和两个分支组成,每个节点最多有两个子节点。其中一个节点称为左子节点,另一个节点称为右子节点。二叉树具有以下特点:
1. 每个节点最多有两个子节点;
2. 左子节点和右子节点的位置不可颠倒;
3. 每个节点可以为空。二、二叉树镜像的定义
二叉树镜像指的是将一棵二叉树的左右子树对换得到的二叉树。三、二叉树镜像的实现方法
要实现一棵二叉树的镜像,可以使用递归或迭代两种方法。方法一:递归实现
1. 首先判断树是否为空。
2. 如果不为空,则交换当前节点的左右子节点。
3. 递归调用交换左子节点和右子节点的方法,对左子树和右子树进行镜像操作。下面是一个采用递归实现二叉树镜像的PHP代码示例:
“`php
class TreeNode {
public $value;
public $left;
public $right;public function __construct($value) {
$this->value = $value;
$this->left = null;
$this->right = null;
}
}function mirrorTree($root) {
if ($root == null) {
return;
}// 交换当前节点的左右子节点
$temp = $root->left;
$root->left = $root->right;
$root->right = $temp;// 递归调用交换左子节点和右子节点的方法
mirrorTree($root->left);
mirrorTree($root->right);
}
“`方法二:迭代实现
使用迭代的方法实现二叉树镜像需要借助栈来实现。1. 首先判断根节点是否为空,如果为空则直接返回空。
2. 创建一个空栈,并将根节点入栈。
3. 循环遍历直到栈为空:
a. 弹出栈顶节点,并交换该节点的左右子节点。
b. 如果该节点的左子节点不为空,则将左子节点入栈。
c. 如果该节点的右子节点不为空,则将右子节点入栈。下面是一个采用迭代实现二叉树镜像的PHP代码示例:
“`php
class TreeNode {
public $value;
public $left;
public $right;public function __construct($value) {
$this->value = $value;
$this->left = null;
$this->right = null;
}
}function mirrorTree($root) {
if ($root == null) {
return;
}$stack = [];
array_push($stack, $root);while (!empty($stack)) {
$node = array_pop($stack);// 交换当前节点的左右子节点
$temp = $node->left;
$node->left = $node->right;
$node->right = $temp;if ($node->left != null) {
array_push($stack, $node->left);
}if ($node->right != null) {
array_push($stack, $node->right);
}
}
}
“`以上就是使用递归和迭代两种方法来实现二叉树镜像的示例代码。根据实际情况选择其中一种方法即可。
2年前