翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
示例 2:
输入:root = [2,1,3]
输出:[2,3,1]
想法一:
1.是在前序遍历(递归)中反转二叉树:
class Solution {//实际上是一个前序遍历,只是在中间加上了翻转的过程 public: TreeNode* invertTree(TreeNode* root) { if (root == nullptr) { return root; } cout << root->val << endl; invertTree(root->left); invertTree(root->right); return root;//题目要求最后返回根节点 } };
2.在前序循环遍历中翻转二叉树:
class Solution { public: TreeNode* invertTree(TreeNode* root) { stack<TreeNode*>st; if (root == NULL) { return root; } st.push(root); while (!st.empty()) { TreeNode* ft = st.top(); swap(ft->left,ft->right); st.pop(); if (ft->right)st.push(ft->right);//注意这里的位置和递归的方法是反过来的,是先右节点后左节点 if (ft->left)st.push(ft->left); } return root; } };
想法二、利用后序遍历来实现:(原理类似),但是中序遍历的话可能会更难