Invert Tree

Invert Tree

题目描述:

给定一棵树的头结点,要求对树中的节点进行操作,即将左节点变为右节点;右节点变为左节点。

例子:

LeetCode226.

解题思路:

主要的思路还是递归的想法:我们不断遍历树的节点,碰到空节点和叶节点返回;不然交换其左右节点,然后递归在左右子树上调用该函数。

代码如下:

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
/**
* 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 {
public:
TreeNode* invertTree(TreeNode* root) {
invert(root);
return root;
}
void invert(TreeNode* &node){
if (!node) return;
if (!node->left && !node->right) return;
TreeNode* tmp = node->left;
node->left = node->right;
node->right = tmp;
//改变左右子树
invert(node->left);
invert(node->right);
//递归调用
}
};