二叉树的镜像

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

    解题过程:先前序遍历树的每个结点,如果遍历到结点有子结点,交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。

    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)

点赞