题目
原题链接
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
思路
什么是翻转二叉树?
简单点说……就是将左右子树调换位置,但是需要注意的是,左右子树的左右子树也需要调换位置,什么意思呢?
可能有点绕……但就将就着听听吧, 为了容易理解,我们就拿题目中的样例举个简单的例子吧:
一开始的树是这样的:
4
/ \
2 7
/ \ / \
1 3 6 9
调换左右子树后,就成了这样,对吧?
4
/ \
7 2
/ \ / \
6 9 1 3
但是左右子树的左右子树也要调换,然后,就成了这样:
4
/ \
7 2
/ \ / \
9 6 3 1
而这就是我们所要输出的答案。
仔细看上面的解题过程,看懂了树的变化,你才算是明白了该题。
代码很简单:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
void invert(TreeNode* node) {
if(node) {
swap(node -> right, node -> left);
invert(node -> right); //右子树的左右子树递归翻转
invert(node -> left); //左子树的左右子树递归翻转
}
}
public:
TreeNode* invertTree(TreeNode* root) {
invert(root);
return root;
}
};