DFS:
递归
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) return root;
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
invertTree(root.left);
invertTree(root.right);
return root;
}
}
迭代BFS:
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) return root;
Deque<TreeNode> st = new LinkedList<>();
st.addLast(root);
while(!st.isEmpty()){
int size = st.size();
while(size > 0){
TreeNode node = st.pollLast();
swap(node);
if(node.left != null) st.addLast(node.left);
if(node.right != null) st.addLast(node.right);
size--;
}
}
return root;
}
public void swap(TreeNode node){
TreeNode tmp = node.left;
node.left = node.right;
node.right = tmp;
}
}
切记不能写成下面的swap函数,好像树节点不能直接swap,一定要node.left = tmp之类的。
public void swap(TreeNode left, TreeNode right){
TreeNode tmp = left;
left = right;
right = tmp;
}