给定一棵二叉树的根节点 root,请左右翻转这棵二叉树,并返回其根节点。
示例 1:

**输入:**root = [5,7,9,8,3,2,4]
输出:[5,9,7,4,2,3,8]
提示:
树中节点数目范围在 [0, 100] 内
-100 <= Node.val <= 100
针对子树,根节点的左指针指向翻转后的右子树,右指针指向翻转后的左子树
1 2 3 4 5 6 7 8 9 10 11
| class Solution { public: TreeNode *flipTree(TreeNode *root) { if (root == nullptr) return nullptr; TreeNode *mid = root->left; root->left = flipTree(root->right); root->right = flipTree(mid); return root; } };
|
另一种方法针对结点,根节点的左右指针直接交换指向的结点,接着分别对结点做相应的操作
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Solution { public: TreeNode *flipTree(TreeNode *root) { if (root == nullptr) return nullptr; TreeNode *mid = root->left; root->left = root->right; root->right = mid; flipTree(root->left); flipTree(root->right); return root; } };
|
这种方法可以用栈来模仿递归过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { public: TreeNode *flipTree(TreeNode *root) { if (root == nullptr) return nullptr; stack<TreeNode *> f; f.push(root); while (!f.empty()) { TreeNode *cur = f.top(); f.pop(); if (cur->left != nullptr) f.push(cur->left); if (cur->right != nullptr) f.push(cur->right); TreeNode *mid = cur->left; cur->left = cur->right; cur->right = mid; } return root; } };
|