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;
}
这篇博客详细介绍了如何解决LeetCode第226题——翻转二叉树的问题,提供了两种方法:深度优先搜索(DFS)的递归解决方案和广度优先搜索(BFS)的迭代解决方案。特别强调在实现过程中,不能直接使用交换节点的操作,应正确设置节点的左右子树。
237

被折叠的 条评论
为什么被折叠?



