题目
解答
递归方法的话很简单,直接写一个inverse函数(输入为TreeNode*)——对于当前节点的left子树和right子树都进行inverse操作。
如果要用非递归实现的话也很简单,先把root节点压栈,然后写一个while循环,当这个栈不为空时进行如下操作:把栈顶元素弹出来,如果为NULL则continue;否则把弹出来的节点的左右指针交换然后再把它们压入栈中。代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
stack<TreeNode*> nodes;
nodes.push(root);
TreeNode *temp = root;
while(!nodes.empty()) {
TreeNode *temp = nodes.top();
nodes.pop();
if(temp == NULL)
continue;
TreeNode *a = temp->left;
temp->left = temp->right;
temp->right = a;
nodes.push(temp->left);
nodes.push(temp->right);
}
return root;
}
};