二叉树的镜像

来源:互联网 发布:淘宝装修日记精华帖 编辑:程序博客网 时间:2024/04/28 06:02

题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。

通过画图,可知二叉树的镜像如下图所示:

Java代码:

package offer;import java.util.LinkedList;import java.util.Queue;public class MirrorRecursively {/* * 求二叉树的镜像 * 先前序遍历这棵树的每个结点,如果遍历到的结点有子节点,就交换它的两个子节点。 * 当交换完所有非页子结点的左右子节点之后,就得到了树的镜像。 */public static void mirrorRecursively(BinaryTreeNode root){if(root==null)return;if(root.left==null && root.right==null)return;BinaryTreeNode tmp = root.left;root.left = root.right;root.right = tmp;mirrorRecursively(root.left);mirrorRecursively(root.right);}/** * 循环解法 * @param root */public static void mirrorLoop(BinaryTreeNode root){if(root==null)return;if(root.left==null && root.right==null)return;BinaryTreeNode tmp1 = root;Queue<BinaryTreeNode> list = new LinkedList<BinaryTreeNode>();list.add(tmp1);while(!list.isEmpty()){BinaryTreeNode node = list.poll();swap(node.left,node.right);if(node.left!=null)list.add(node.left);if(node.right!=null)list.add(node.right);}}private static void swap(BinaryTreeNode left,BinaryTreeNode right){BinaryTreeNode tmp = left;left = right;right = tmp;}}


0 0
原创粉丝点击