给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
dfs的代码还是比较简单的,从整体分析,翻转二叉树只需把每个节点的左右子树翻转即可,可以使用前序和后序遍历,如果使用中序遍历,可能会导致重新交换(使得交换无效);
public TreeNode invertTree(TreeNode root) {
if(root==null){
return null;
}
invertTree(root.left);
invertTree(root.right);
swap(root);
return root;
}
public void swap(TreeNode node){
TreeNode temp=node.left;
node.left=node.right;
node.right=temp;
}
使用bfs进行层次遍历,原理同上,对每个节点的左右孩子进行交换。
public TreeNode invertTree(TreeNode root) {
if(root==null){
return null;
}
Deque<TreeNode> deque=new LinkedList<>();
deque.offer(root);
while (!deque.isEmpty()){
int size=deque.size();
for (int i = 0; i < size; i++) {
TreeNode node=deque.poll();
swap(node);
if(node.left!=null){
deque.offer(node.left);
}
if(node.right!=null){
deque.offer(node.right);
}
}
}
return root;
}
public void swap(TreeNode node){
TreeNode temp=node.left;
node.left=node.right;
node.right=temp;
}