面试题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 };