面试题27. 二叉树的镜像
解题思路:大多数二叉树都可用递归实现。
递归的内部实现就是栈,所以可以用栈代替递归实现。
递归注意结束条件。
1 /**
2 * Definition for a binary tree node.
3 * struct TreeNode {
4 * int val;
5 * TreeNode *left;
6 * TreeNode *right;
7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8 * };
9 */
10 class Solution {
11 public:
12 TreeNode* mirrorTree(TreeNode* root)
13 {
14 if (root == NULL)
15 return NULL;
16 return root=solve(root);
17 }
18
19 TreeNode *solve(TreeNode *node)
20 {
21 if (node == NULL)
22 return node;
23 TreeNode *left = solve(node->left);
24 TreeNode *right = solve(node->right);
25 node->left = right;
26 node->right = left;
27
28 return node;
29 }
30 };
栈实现:队列实现也可以,因为这里不需要输出值,只需要将头节点找到即可,管它存在什么容器里,二叉树内部结构没被破坏就行。
1 class Solution {
2 public:
3 TreeNode* mirrorTree(TreeNode* root) {
4 stack<TreeNode*> s;
5 s.push(root);
6 while (!s.empty()) {
7 TreeNode* node = s.top();
8 s.pop();
9 if (node == NULL) {
10 continue;
11 }
12 swap(node->left, node->right);
13 s.push(node->left);
14 s.push(node->right);
15 }
16 return root;
17 }
18 };