一、前言
本系列文章为《剑指Offer》刷题笔记。
刷题平台:牛客网
书籍下载:共享资源
二、题目
操作给定的二叉树,将其变换为源二叉树的镜像。
如下图所示:
1、思路
先交换根节点的两个子结点之后,我们注意到值为10、6的结点的子结点仍然保持不变,因此我们还需要交换这两个结点的左右子结点。做完这两次交换之后,我们已经遍历完所有的非叶结点。此时变换之后的树刚好就是原始树的镜像。交换示意图如下所示:
2、代码
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: void Mirror(TreeNode *pRoot) { if((pRoot == NULL) || (pRoot->left == NULL && pRoot->right == NULL)){ return; } //交换根节点的左右结点 TreeNode *pTemp = pRoot->left; pRoot->left = pRoot->right; pRoot->right = pTemp; //递归左子树 if(pRoot->left){ Mirror(pRoot->left); } //递归右子树 if(pRoot->right){ Mirror(pRoot->right); } } }; |
Python2.7:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # 返回镜像树的根节点 def Mirror(self, root): # write code here if (root == None or (root.left == None and root.right == None)): return None tmp = root.left root.left = root.right root.right = tmp if root.left: self.Mirror(root.left) if root.right: self.Mirror(root.right) |
微信公众号
分享技术,乐享生活:微信公众号搜索「JackCui-AI」关注一个在互联网摸爬滚打的潜行者。
2019年4月8日 下午5:17 沙发
python2.7
请问输入输出是怎么样的呢?
2019年4月8日 下午6:57 1层
@小小毛 什么意思?输入输出是什么样子的?
2019年4月8日 下午7:16 2层
@Jack Cui 我想表达的意思是,定义的这个类的输入是什么?我没有看到测试例子。虽然牛客网显示运行成功,但是我并不知道,怎么举例(或者说,没有if __name__ == ‘__main__’:
main())
2019年4月9日 上午9:59 3层
@小小毛 牛客网这种的题,你不用管怎么调用这个函数。函数的参数,就算输入了。
2019年7月19日 上午11:08 板凳
or (root.left == None and root.right == None)似乎没有必要?
2019年7月19日 下午7:02 1层
@EzJobSniper 确实,逻辑上来讲,没有必要,早返回,晚返回的问题。