反转二叉树


这题真是哭了…啥也不说了….
一个二叉树:

1
2
3
4
5
     1
/ \
2 3
/ \ / \
4 5 6 7

经过反转后:

1
2
3
4
5
     1
/ \
3 2
/ \ / \
7 6 5 4

如果用递归做,那就是递归地对每一个节点交换它的左叶子和右叶子.

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
32
33
34
35
36
37
38
39
40
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void reverseBT(TreeNode *root) {
if (!root)
return;
//交换这个节点的左右叶子
TreeNode *temp = root->left;
root->left = root->right;
root->right = root->left;
//这只是处理了当前节点,还应该处理这个节点的孩子
//处理左孩子
reverseBT(root->left);
//处理右孩子
reverseBT(root->right);
}
int main()
{
TreeNode root(1);
TreeNode c1(2);
TreeNode c2(3);
TreeNode c11(4);
TreeNode c12(5);
TreeNode c21(6);
// TreeNode c22(7);
root.left = &c1;
root.right = &c2;
c1.left = &c11;
c1.right = &c12;
c2.left = &c21;
// c2.right = &c22;
// cout << root.val << endl;
// cout<<root.left->val;
reverseBT(&root);
cout<<root.left->right->val;
return 0;
}

这样感觉就行了,自己写的测试也没啥问题,但是leetcode过不去.leetcode要求的函数原型是这样:

1
TreeNode* invertTree(TreeNode* root)

不清楚它为什么要返回值..