剑指offer面试题19 二叉树的镜像

来源:互联网 发布:手机本地端口号 编辑:程序博客网 时间:2024/06/05 08:21

解题思路:

(1)递归实现:利用中序遍历的思想,在遍历到每一个节点的同时,如果这个节点不为空或者这个节点不为叶子节点,将其看做根节点,交换其左右子树的指针的位置。直到递归返回到根节点为止,形成二叉树的镜像。

(2)循环实现:可以借鉴层次遍历的思想,在某个节点出队列的时候,先交换这个节点的左右子树,在将交换后的左右子节点入队列,如此循环下去。有兴趣的可以自己实现下。

class TreeNode {int val;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}}/** * 求二叉树的镜像 */public class Solution {/** * 解题思路:将一颗二叉树每个节点的左子树交换到右子树,右子树交换到左子树 */public static void Mirror(TreeNode root) {if (root == null) {return;}// 叶子节点无需交换,直接返回if (root.left == null && root.right == null) {return;}// 对左子树进行镜像操作Mirror(root.left);// 对右子树进行镜像操作Mirror(root.right);// 将左、右子树合并为一个新树TreeNode temp = root.left;root.left = root.right;root.right = temp;}}