请完成一个函数,输入一个二叉树,该函数输出它的镜像。
解题过程:先前序遍历树的每个结点,如果遍历到结点有子结点,交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。
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)
本文出自 “许大树” 博客,请务必保留此出处http://abelxu.blog.51cto.com/9909959/1972899
原文地址:http://abelxu.blog.51cto.com/9909959/1972899