二叉樹的鏡像

    請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像。


    解題過程:先前序遍歷樹的每個結點,如果遍歷到結點有子結點,交換它的兩個子結點。當交換完所有非葉子結點的左右子結點之後,就得到了樹的鏡像。


    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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章