思路:首先按层访问二叉树,反转每个结点的左、右子树即可。我们可以使用队列完成按层访问的目的
//迭代实现
class Solution {
public TreeNode invertTree(TreeNode root) {
TreeNode p=root;
if(root==null)
return root;
LinkedList<TreeNode> queue=new LinkedList<>();
queue.add(p);
while(!queue.isEmpty()){
int length=queue.size();
for(int i=0;i<length;i++){
TreeNode node = queue.poll();
TreeNode temp=node.right;
node.right=node.left;
node.left=temp;
if(node.left!=null)
queue.add(node.left);
if(node.right!=null)
queue.add(node.right);
}
}
return root;
}
}
//递归实现
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null)
return root;
TreeNode temp=root.left;
root.left=root.right;
root.right=temp;
invertTree(root.left);
invertTree(root.right);
return root;
}
}