剑指offer-面试题.二叉树的镜像

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

 二叉树节点定义如下:

1 strcut BinaryTreeNode
2 {
3     int val;
4     strcut BinaryTreeNode* m_pleft;
5     strcut BinaryTreeNode* m_pright;
6 }

 

本题可以参考http://www.cnblogs.com/vpoet/p/4660486.html(Leecode-Invert Binary Tree)一文

实质是递归交换二叉树的左右节点。

比如

1         8
2        /  \
3       6    10
4      / \   / \
5     5  7  9  11

 

1.首先查看根节点与左右子节点是否为空,若为空则无需交换

2.先交换根节点的左右子节点。

3.再交换交换后的左子树的左右节点和右子树的左右节点

4.知道到达叶子节点,交换结束。

 

递归函数如下:

 1 void MirrorRecursively(BinaryTreeNode *pNode)
 2 {
 3     if(pNode==NULL)
 4         return NULL;
 5 
 6     if(pNode->m_pleft==NULL&&pNode->m_pright==NULL)
 7         return NULL;
 8 
 9     struct BinaryTreeNode *TempNode;
10     TempNode=pNode->m_pleft;
11     pNode->m_pleft=pNode->m_pright;
12     pNode->m_pright=TempNode;
13 
14     if(pNode->m_pleft)
15     {
16         MirrorRecursively(pNode->m_pleft);
17     }
18 
19     if(pNode->m_pright)
20     {
21         MirrorRecursively(pNode->m_pright);
22     }
23 }

 

说明:注意结束条件,到达叶子结点结束

1 if(pNode->m_pleft==NULL&&pNode->m_pright==NULL)
2  7         return NULL;

 

 

 

你可能感兴趣的:(面试题)