1. 程式人生 > >二叉樹的鏡像

二叉樹的鏡像

二叉樹 c# 鏡像

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


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


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

二叉樹的鏡像