Invert a binary tree.
题目意思是将二叉树每层的左右孩子交换。
方法一:递归算法
/**
* 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){
TreeNode* temp=root->left;
root->left=root->right;
root->right=temp;
invertTree(root->left);
invertTree(root->right);
}
return root;
}
};
方法二:非递归算法,借助于队列实现广度优先搜索
TreeNode* invertTree(TreeNode* root) {
if(nullptr == root) return root;
queue<TreeNode*> myQueue;
myQueue.push(root);
while(!myQueue.empty()){
TreeNode *node = myQueue.front();
myQueue.pop();
if(node->left != nullptr) myQueue.push(node->left);
if(node->right != nullptr) myQueue.push(node->right);
TreeNode* tmp = node->left;
node->left = node->right;
node->right = tmp;
}
return root;
}
此代码中注意两点:
1.代码中交换的以左右孩子分别为根节点的子二叉树,而不是单纯的将左右孩子的数值交换而其对应的孩子不变。
2.nullptr是c++11中新出现的关键字,这里可换成NULL