剑指offer---二叉树的镜像---java实现

来源:互联网 发布:coc国王升级数据 编辑:程序博客网 时间:2024/05/01 15:07

题目描述

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

输入描述:

二叉树的镜像定义:源二叉树

        8

       /  \

      6   10

     / \  / \

     5  7 9 11

     镜像二叉树

        8

       /  \

      10   6

     / \  / \

     11 9 7  5

其实就是交换二叉树的左右子树,可用递归实现:

交换根节点的左右孩子,再分别对左孩子进行镜像和右孩子进行镜像

代码:

import java.util.LinkedList;public class MirrorTest{//递归   public void Mirror(TreeNode root)   {   if(root == null)return;   else    {             TreeNode temp = root.left;//交换根节点的左右孩子       root.left = root.right;       root.right = temp;       Mirror(root.left);//镜像根节点的左孩子的左右子树       Mirror(root.right);//镜像根节点的右孩子的左右子树        }   }      //非递归实现   public void Mirror1(TreeNode root)   {   if(root == null)   {   return;   } LinkedList<TreeNode> stack = new LinkedList<TreeNode>();//借助于辅助栈 TreeNode current = null;//存放出栈的栈顶元素 TreeNode temp = null; stack.push(root);//将根元素入栈 while(!stack.isEmpty()) {current = stack.pop();//将根元素出栈 交换根元素的左右子树if(current.left != null || current.right != null)//若左右孩子不为空则交换左右孩子{temp = current.left;current.left = current.right;current.right = temp;}//将根元素的左右孩子压入栈中  if(current.left != null)stack.push(current.left);if(current.right != null)stack.push(current.right); }      }}



0 0
原创粉丝点击