java 二叉树的镜像
2017-06-05 11:27
239 查看
题目
操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5
思路
先序遍历二叉树,判断结点是否含有左子树或右子树,有的话就交换左右子树。直到交换完所有的非叶子结点。代码
import java.util.Stack; import java.util.LinkedList; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class Main { //递归 public static 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 static void MirrorN(TreeNode root){ if(root==null) return; Stack<TreeNode> stack=new Stack<TreeNode>(); stack.push(root); while(!stack.isEmpty()){ TreeNode node = stack.pop(); if(node.left!=null||node.right!=null){ TreeNode temp = node.left; node.left = node.right; node.right = temp; } if(node.left!=null){ stack.push(node.left); } if(node.right!=null){ stack.push(node.right); } } } //层序遍历二叉树 public static void levelTraverse(TreeNode root){ LinkedList<TreeNode> list= new LinkedList<TreeNode>(); list.add(root); while(list.size() != 0){ TreeNode node = list.removeFirst(); System.out.print(node.val + " "); if(node.left != null){ list.add(node.left); } if(node.right != null){ list.add(node.right); } } } public static void main(String[] args) { // TODO Auto-generated method stub TreeNode root = new TreeNode(8); TreeNode a=new TreeNode(6); TreeNode b=new TreeNode(10); TreeNode aa=new TreeNode(5); TreeNode ab=new TreeNode(7); TreeNode ba=new TreeNode(9); TreeNode bb=new TreeNode(11); root.left=a; root.right=b; a.left=aa; a.right=ab; b.left=ba; b.right=bb; levelTraverse(root); MirrorN(root); System.out.println(); levelTraverse(root); } }
相关知识
linkedlist详解相关文章推荐
- 剑指Offer面试题19(Java版):二叉树的镜像
- 【剑指offer-Java版】19二叉树的镜像
- java实现操作给定的二叉树,将其变换为源二叉树的镜像。
- 用java语言,操作给定的二叉树,将其变换为源二叉树的镜像(递归和循环两种方法)
- 剑指Offer 面试题27:二叉树的镜像 Java代码实现
- 剑指offer解题报告(Java版)——二叉树的镜像 19
- 二叉树的镜像(Java实现)
- 笔试面试算法经典--二叉树的镜像-递归与非递归实现(Java)
- 【剑指offer——JAVA实现】二叉树的镜像
- Java求一个二叉树的镜像(即翻转二叉树)
- 剑指offer第19题 输出二叉树的镜像 java解法
- 剑指Offer(Java版):二叉树的镜像
- Java 剑指offer_面试题19_二叉树的镜像
- 数据结构与算法分析笔记与总结(java实现)--二叉树12:二叉树的镜像
- 剑指Offer:二叉树的镜像(JAVA)
- 剑指Offer:面试题19——二叉树的镜像(java实现)
- 剑指Offer 19题 二叉树的镜像 Java版
- 二叉树的镜像(java版)
- 镜像二叉树并层序打印 Java实现
- Java实现二叉树镜像 变换