递归算法
先交换该节点的左右孩子,再将孩子作为根节点作为参数调用函数,节点为空为终止条件
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);
}
}
}
京公网安备 11010502036488号