对称二叉树
https://leetcode.cn/problems/invert-binary-tree/
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
解析:
最开始的思路:传入root的两个子结点,交换节点和值,这样会造成两个对称节点数据进行了多次交换,显然,Wrong, and
最后,实现f(root.left,root.right), 传入的参数是( 对称的两个结点 ),遇到的问题:递归的时候总是遇到其中一个结点为null,另一个!=null,没有没有办法交换两个值的位置,函数的参数还需要传入子结点的父节点,f(lrt,ls,rrt,rs)
官网题解(思路):
使每个结点的子结点进行交换即可
1Solution <递归(有返回值)> Accepted / Used 时空复杂度 O(n) O(n)
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null) {
return null;
}
TreeNode temp = root.left;
root.left = invertTree(root.right);
root.right = invertTree(temp);
return root;
}
2 Solution <递归(无返回值)> Accepted / Used 时空复杂度 O(n) O(n)
class Solution {
static void f(TreeNode root) {
if(root==null) return ;
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
f(root.left);
f(root.right);
}
public TreeNode invertTree(TreeNode root) {
f(root);
return root;
}
}
3 Solution 栈DFS Accepted / Used 时空复杂度 O(n) O(n)
class Solution {
static void f(TreeNode root) {
if(root==null) return ;
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
f(root.left);
f(root.right);
}
public TreeNode invertTree(TreeNode root) {
f(root);
return root;
}
}
4 Solution 队列BFS Accepted / Used 时空复杂度 O(n) O(n)