【LeetCode】Day138-反转二叉树的奇数层

题目

6182. 反转二叉树的奇数层【中等】

题解

BFS

最简单的思路,bfs层次遍历,奇数层转存为数组,然后对数组内结点的值进行翻转。

class Solution {
    public TreeNode reverseOddLevels(TreeNode root) {
        Queue<TreeNode>queue=new LinkedList<>();
        queue.offer(root);
        int level=0;
        while(!queue.isEmpty()){
            int sk=queue.size();
            List<TreeNode>list=new ArrayList<>();
            for(int i=0;i<sk;i++){
                TreeNode p=queue.poll();
                if(level%2==1){
                    list.add(p);
                }
                if(p.left!=null){
                    queue.offer(p.left);
                    queue.offer(p.right);
                }
            }
            reverse(list);
            level++;
        }
        return root;
    }
    public void reverse(List<TreeNode>list){
        int n=list.size();
        if(n==0)
            return;
        for(int i=0;i<n/2;i++){
            TreeNode p=list.get(i);
            TreeNode q=list.get(n-i-1);
            int tmp=p.val;
            p.val=q.val;
            q.val=tmp;
        }
        return;
    }
}

时间复杂度: O ( n 2 ) O(n^2) O(n2)

空间复杂度: O ( n ) O(n) O(n)

DFS

还可以用递归dfs的方法做,更简单但是需要递归的技巧

class Solution {
    public TreeNode reverseOddLevels(TreeNode root) {
        dfs(root.left,root.right,true);
        return root;
    }
    public void dfs(TreeNode l,TreeNode r,boolean isOddLevel){
        if(l==null)
            return;
        if(isOddLevel){
            int tmp=l.val;
            l.val=r.val;
            r.val=tmp;
        }
        dfs(l.left,r.right,!isOddLevel);
        dfs(r.left,l.right,!isOddLevel);
    }
}

时间复杂度: O ( h ) O(h) O(h)

空间复杂度: O ( h ) O(h) O(h)

p.s 今天第一次做周赛,只ac了两道,卡在了第三道上。哎,leetcode道阻且长啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值