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

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

 二叉树节点定义如下:

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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值