剑指offer18-二叉树的镜像
题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5
思路:采用递归的思想
从根节点开始,1若是左右子树都不为空,就将根节点的左指针指向右子树,右指针指向左子树,然后递归左右子树;
2若是左子树为空,右子树不为空,就将根节点的左指针指向右子树,右指针指向null,然后递归变换后的左子树(原来的右子树已经变为现在的左子树)
3若是右子树为空,左子树不为空正好和2相反
代码:
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public void Mirror(TreeNode root) { if(root==null) return ; if(root.left!=null && root.right!=null) { TreeNode p = root.left; root.left = root.right; root.right = p; Mirror(root.left); Mirror(root.right); } else if(root.left!=null && root.right==null) { root.right = root.left; root.left = null; Mirror(root.right); } else if(root.left==null && root.right!=null) { root.left = root.right; root.right = null; Mirror(root.left); } } }