题目:将二叉树左右反转
分析:可以采用递归的方法反转每个节点的左右子树。非递归的话其实就是层序遍历然后反转其左右节点就行了。
答案:
递归:
/**
* 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) {
if( root == NULL)
return NULL;
TreeNode *tmpNode = root->left;
root->left = invertTree(root->right);
root->right = invertTree(tmpNode);
}
};
遍历:
/**
* 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) {
if( root == NULL)
return NULL;
queue<TreeNode*> node_queue;
node_queue.push(root);
while(node_queue.size()>0){
TreeNode *currentNode = node_queue.front();
node_queue.pop();
// exchange
TreeNode *tmpNode = currentNode->left;
currentNode->left = currentNode->right;
currentNode->right = tmpNode;
if (currentNode->left)
node_queue.push(currentNode->left);
if (currentNode->right)
node_queue.push(currentNode->right);
}
return root;
}
};