https://leetcode.cn/problems/invert-binary-tree/description/
比较简单的一题,在遍历每一个节点时对其左右孩子进行翻转即可。
递归写法
TreeNode* traversal(TreeNode* node) {
if (!node) {
return nullptr;
}
// 后序遍历
TreeNode* tmp = node->left;
node->left = traversal(node->right);
node->right = traversal(tmp);
return node;
}
TreeNode* invertTree(TreeNode* root) {
return traversal(root);
}
迭代写法(统一写法)
TreeNode* invertTree(TreeNode* root) {
stack<TreeNode*> st;
TreeNode* cur;
TreeNode* temp;
if (root)
st.push(root);
while (!st.empty()) {
cur = st.top();
if (cur) {
st.pop();
// 后序遍历
// 中
st.push(cur);
st.push(nullptr);
// 左
if (cur->left)
st.push(cur->left);
// 右
if (cur->right)
st.push(cur->right);
}
// 执行翻转操作
else {
st.pop();
cur = st.top();
st.pop();
temp = cur->left;
cur->left = cur->right;
cur->right = temp;
}
}
return root;
}