《剑指offer》面试题19 二叉树的镜像 Java版

书中方法:这道题目可能拿到手没有思路,我们可以在纸上画出简单的二叉树来找到规律。最后我们发现,镜像的实质是对于二叉树的所有节点,交换其左右子节点。搞清楚获得镜像的方法,这道题实际上就变成了一道二叉树遍历的变形。这里选择前序遍历二叉树。

	public void change(TreeNode root){
		if(root == null)return;
		
		TreeNode temp = root.left;
		root.left = root.right;
		root.right = temp;
		
		change(root.left);
		change(root.right);
	}

如果改成循环实现:实际上也就是把递归改成循环前序遍历二叉树。注意null是可以被压入栈(队列、HashMap等)的,栈全部是null元素和栈为空不同。

	public void change2(TreeNode root){
		if(root == null)return;
		Stack<TreeNode> stack = new Stack<TreeNode>();
		stack.push(root);
		
		while(!stack.isEmpty()){
			TreeNode now = stack.pop();
			if(now.right != null)stack.push(now.right);
			if(now.left != null)stack.push(now.left);
			
			TreeNode temp = now.left;
			now.left = now.right;
			now.right = temp;
		}
	}
posted @ 2019-10-07 11:08  CrazyJack  阅读(181)  评论(0编辑  收藏  举报