请完成一个函数,输入一个二叉树,该函数输出它的镜像。
解题过程:先前序遍历树的每个结点,如果遍历到结点有子结点,交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。
C#实现方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#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实现方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/**
* 二叉树的镜像
* 请完成一个函数,输入一个二叉树,该函数输出它的镜像
* @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实现方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@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)
|
本文转自 许大树 51CTO博客,原文链接:http://blog.51cto.com/abelxu/1972899,如需转载请自行联系原作者