题目
思路BFS
使用BFS遍历的时候交换
只需要对原有的BFS遍历时加上交换的代码即可(老三行)。
public TreeNode invertTree(TreeNode root) {public TreeNode invertTree(TreeNode root) {//root为空的情况要进行排除否则会在交换时出现空指针异常if(root==null) {return null;}//用层序遍历完成对二叉树的遍历Queue<TreeNode> queue = new LinkedList<>();queue.add(root);while(!queue.isEmpty()){//进行交换//temp相当于一个辅助指针帮助遍历这棵树TreeNode temp = queue.poll();TreeNode left = temp.left;temp.left = temp.right;temp.right = left;if(temp.left!=null){ queue.add(temp.left);}if(temp.right!=null){ queue.add(temp.right);}}return root;}}
思路DFS
用递归的方式求解,非常简单
public TreeNode invertTree(TreeNode root) {//递归函数的终止条件,节点为空时返回if(root==null) {return null;}//下面三句是将当前节点的左右子树交换(老三行)TreeNode temp = root.right;root.right = root.left;root.left = temp;//递归交换当前节点的左子树invertTree(root.left);//递归交换当前节点的右子树invertTree(root.right);//函数返回时就表示当前这个节点,以及它的左右子树//都已经交换完了return root;}