请完成一个函数,输入一个二叉树,该函数输出它的镜像。
解题过程:先前序遍历树的每个结点,如果遍历到结点有子结点,交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。
C#实现方式:
#region 二叉树的镜像 /// 请完成一个函数,输入一个二叉树,该函数输出它的镜像 public static void MirrorRecursively(BinaryTreeNode pNode) { if ((pNode == null) || (pNode.left == null && pNode.right == null)) return; BinaryTreeNode pTemp = pNode.left; pNode.left = pNode.right; pNode.right = pTemp; if (pNode.left != null) MirrorRecursively(pNode.left); if (pNode.right != null) MirrorRecursively(pNode.right); } #endregion
Java实现方式:
/** * 二叉树的镜像 * 请完成一个函数,输入一个二叉树,该函数输出它的镜像 * @param pNode */ public static void mirrorRecursively(BinaryTreeNode pNode) { if ((pNode == null) || (pNode.left == null && pNode.right == null)) return; BinaryTreeNode pTemp = pNode.left; pNode.left = pNode.right; pNode.right = pTemp; if (pNode.left != null) mirrorRecursively(pNode.left); if (pNode.right != null) mirrorRecursively(pNode.right); }
Python实现方式:
@staticmethod def mirrorRecursively(pNode): """ 二叉树的镜像 请完成一个函数,输入一个二叉树,该函数输出它的镜像 :param pNode: :return: """ if (pNode == None) or (pNode.left == None and pNode.right == None): return pTemp = pNode.left pNode.left = pNode.right pNode.right = pTemp if pNode.left != None: BinaryTree.mirrorRecursively(pNode.left) if pNode.right != None: BinaryTree.mirrorRecursively(pNode.right)