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;
}