p27 翻转二叉树 (leetcode 226)
一:解题思路
这道题目有2种做法。
解法一:利用递归的方法来做。
解法二:利用一个辅助队列,用迭代的方法来做。2种方法的时间复杂度,和空间复杂度都为:O(n)
二:完整代码示例 (C++版和Java版)
递归版C++:
class Solution { public: TreeNode* invertTree(TreeNode* root) { if (root == NULL) return root; TreeNode* node = root; TreeNode* temp = node->left; node->left = node->right; node->right = temp; invertTree(node->left); invertTree(node->right); return root; } };
递归版Java:
class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) return root; TreeNode node = root; TreeNode temp = node.left; node.left = node.right; node.right = temp; invertTree(node.left); invertTree(node.right); return root; } }
迭代版C++:
class Solution { public: TreeNode* invertTree(TreeNode* root) { if (root == NULL) return root; queue<TreeNode*> queue; queue.push(root); while (!queue.empty()) { TreeNode* node = queue.front(); queue.pop(); TreeNode* temp = node->left; node->left = node->right; node->right = temp; if (node->left != NULL) queue.push(node->left); if (node->right != NULL) queue.push(node->right); } return root; } };
迭代版Java:
class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) return root; Queue<TreeNode> queue=new LinkedList<>(); queue.add(root); while(!queue.isEmpty()) { TreeNode node=queue.poll(); TreeNode temp=node.left; node.left=node.right; node.right=temp; if(node.left!=null) queue.add(node.left); if(node.right!=null) queue.add(node.right); } return root; } }

浙公网安备 33010602011771号