递归算法
先交换该节点的左右孩子,再将孩子作为根节点作为参数调用函数,节点为空为终止条件
public class Solution { public void Mirror(TreeNode root) { // 当前节点不为空 if(root == null) { return; } // 交换孩子节点 TreeNode node = root.left; root.left = root.right; root.right = node; // 将孩子作为根镜像反转 Mirror(root.left); Mirror(root.right); } }
非递归算法
- 进行层次遍历的处理,每次交换该节点的左右孩子,再将孩子作为根节点进入队列,队列为空为终止条件
import java.util.*; public class Solution { public void Mirror(TreeNode root) { Queue<TreeNode> queue = new LinkedList(); // 队列不为空 queue.offer(root); while(!queue.isEmpty()) { TreeNode node = queue.poll(); // 当前节点不为空才处理 if(node == null) { continue; } // 交换节点 TreeNode tmpNode = node.left; node.left = node.right; node.right = tmpNode; // 孩子进队列 queue.offer(node.left); queue.offer(node.right); } } }