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

求一棵树的镜像的过程:先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。
代码实现:
public class BinaryTreeNode{ int value; BinaryTreeNode left; BinaryTreeNode right; public BinaryTreeNode(int val,BinaryTreeNode leftNode,BinaryTreeNode rightNode){ this.value=val; this.left=leftNode; this.right=rightNode; } }
public class Solution{ public static void mirrorRecursively(BinaryTreeNode node){ //检查当前结点是否为null,或两个子结点是否都为null if(node==null||(node.left==null&&node.right==null)){ return; } //交换左右子结点 BinaryTreeNode tempNode=node.left; node.left=node.right; node.right=tempNode; //递归当前结点的左子结点 if(node.left!=null){ mirrorRecursively(node.left); } //递归当前结点的右子结点 if(node.right!=null){ mirrorRecursively(node.right); } } public static void preorderTraversal(BinaryTreeNode node){ if(node!=null){ System.out.print(node.value+" "); preorderTraversal(node.left); preorderTraversal(right); } } public static void main(String[] args){ BinaryTreeNode node7=new BinaryTreeNode (11,null,null); BinaryTreeNode node6=new BinaryTreeNode (9,null,null); BinaryTreeNode node5=new BinaryTreeNode (10,node6,node7); BinaryTreeNode node4=new BinaryTreeNode (7,null,null); BinaryTreeNode node3=new BinaryTreeNode (5,null,null); BinaryTreeNode node2=new BinaryTreeNode (6,node3,node4); BinaryTreeNode node1=new BinaryTreeNode (8,node2,node5); preorderTraversal(node1); mirrorRecursively(node1); System.out.println(); preorderTraversal(node1); } }
posted on
浙公网安备 33010602011771号