請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像。
解題過程:先前序遍歷樹的每個結點,如果遍歷到結點有子結點,交換它的兩個子結點。當交換完所有非葉子結點的左右子結點之後,就得到了樹的鏡像。
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)