翻转一棵二叉树。
题解(一):DFS深搜,在递归搜索的过程中对于每一个结点都交换他们的左右孩子即可。
class Solution {
public TreeNode invertTree(TreeNode root) {
setInvertTree(root);
return root;
}
private void setInvertTree(TreeNode node){
if(node==null)
return;
changeChild(node);
setInvertTree(node.left);
setInvertTree(node.right);
}
private void changeChild(TreeNode node){
TreeNode temp=node.left;
node.left=node.right;
node.right=temp;
}
}
题解(二):BFS广搜。
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null)
return null;
Queue<TreeNode>queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
TreeNode temp=queue.poll();
if(temp.right!=null)
queue.add(temp.right);
if(temp.left!=null)
queue.add(temp.left);
changeChild(temp);
}
return root;
}
private void changeChild(TreeNode node){
TreeNode temp=node.left;
node.left=node.right;
node.right=temp;
}
}