原题描述
Invert Binary Tree
Invert a binary tree.
4
/ \
2 7
/ \ / \
1 3 6 9
to
4
/ \
7 2
/ \ / \
9 6 3 1
分析
将二叉树翻转,即对于每个节点都将其左右子树交换,因此对二叉树做一次遍历即可。为了直观,我们使用层序遍历,考虑使用队列来记录遍历的顺序。
首先将根节点加入队列,然后在队列不为空时循环操作:
1.取队首数据
2.将其左右儿子对调
3.依次将左右儿子加入队列(没有儿子时不将NULL加入队列)
需要注意的是如果是空树则不能对左右儿子进行访问因此需要提前检测。
代码示例
/**
* 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*> wait;
wait.push(root);
while(!wait.empty())
{
TreeNode* present = wait.front();
wait.pop();
TreeNode* temp = present->left;
present->left = present->right;
present->right = temp;
if (present->left != NULL)
wait.push(present->left);
if (present->right != NULL)
wait.push(present->right);
}
return root;
}
};