《剑指offer》 一 二叉树的镜像

191 阅读1分钟

题目:操作给定的二叉树,将其变换为源二叉树的镜像。

             8
    	   /  \
    	  6   10
    	 / \  / \
    	5  7 9 11
    	镜像二叉树
    	    8
    	   /  \
    	  10   6
    	 / \  / \
    	11 9 7  5

第一种解法:采用递归方法

    public class Solution {
        public void Mirror(TreeNode root) {
            if(root == null) return ;
            if(root.left == null && root.right == null) return;
            TreeNode temp = root.left;
            root.left = root.right;
            root.right = temp ;
            if(root.left != null){
                Mirror(root.left);
            }
            if(root.right != null){
               Mirror(root.right);
            }
        }
    }

第二种解法:采用栈,作为辅助存储空间

public class Solution {
    public void Mirror(TreeNode root) {
        if(root == null) return;
        Stack<TreeNode> stack = new Stack<TreeNode>();
        stack.push(root);
        while(!stack.empty()) {
            TreeNode node = stack.pop();
            if(node.left != null || node.right != null) {
                TreeNode nodeLeft = node.left;
                TreeNode nodeRight = node.right;
                node.left = nodeRight;
                node.right = nodeLeft;
            }
            if(node.left != null) stack.push(node.left);
            if(node.right != null) stack.push(node.right);
        }
    }
}