翻转二叉树(结果和原始的轴对称)
可以使用前序(后序)遍历,便于翻转
#include "_myPrint.cpp"
#include "stack"
#include "queue"
using namespace std;
class Solution{
public:
// 确定递归的参数和返回值
// 确定每一层递归需要做的事情
// 确定递归的终止条件
TreeNode* invertTree(TreeNode* root){ //前序递归
if (!root) return root;
swap(root -> left, root -> right);
if (root -> left) invertTree(root -> left);
if (root -> right) invertTree(root -> right);
return root;
}
TreeNode* invertTree_itera(TreeNode* root){ //使用迭代法翻转二叉树也可
stack<TreeNode*> st;
if (!root) return root;
st.push(root);
while (!st.empty()){
TreeNode* tmp = st.top();
st.pop();
// res.push 这里不需要保存前序结果了
swap(tmp -> left, tmp -> right);
if (tmp -> left) st.push(tmp -> left);
if (tmp -> right) st.push(tmp -> right);
}
return root;
}
};
int main(){
Solution s;
TreeNode* root = new TreeNode(8);
TreeNode* l = new TreeNode(7);
TreeNode* r = new TreeNode(6);
root->left = l;
root->right = r;
TreeNode* res = s.invertTree_itera(root);
printCollection p;
p.printTreeLevelOrder(res);
}