层序遍历二叉树是否为奇偶树,DFS,BFS

这篇博客探讨了两种检查二叉树性质的方法:一种是使用BFS(广度优先搜索),另一种是使用DFS(深度优先搜索)。在BFS中,通过队列存储节点并检查每一层节点的值来确保其满足偶数或奇数层的特定条件。而在DFS中,利用递归和哈希映射记录节点值,检查每个节点是否符合当前层级的预期。两种方法都确保了树的正确性。
摘要由CSDN通过智能技术生成

BFS:

class Solution {
    public boolean isEvenOddTree(TreeNode root) {
        Deque<TreeNode> bf= new ArrayDeque<>();//设置队列
        boolean flag = true;//判断是否为偶数
       bf.addLast(root);//加入根节点
        while (!d.isEmpty()) {
            int size = bf.size(), prev = flag ? 0 : 0x3f3f3f3f;//判断哨兵值,判断最大和最小
            while (size-- > 0) {
                TreeNode node = bf.pollFirst();//取出头节点
                int value = node.val;//值是唯一的
                if (flag && (value% 2 == 0 || value <= prev)) return false;
                if (!flag && (value % 2 != 0 || value>= prev)) return false;//与最初那个最大或者最小值进行比较
                prev = value;//要取那个唯一值,作为当前行头节点
                if (node.left != null) bf.addLast(node.left);
                if (node.right != null) bf.addLast(node.right);
            }
            flag = !flag;
        }
        return true;
    }
}

class Solution {
    Map<Integer, Integer> map = new HashMap<>();
    public boolean isEvenOddTree(TreeNode root) {
        return dfs(root, 0);
    }
    boolean dfs(TreeNode root, int idx) {
        boolean flag = idx % 2 == 0;//判断为偶数
        int prev = map.getOrDefault(idx, flag ? 0 : 0x3f3f3f3f), cur = root.val;
        if (flag && (cur % 2 == 0 || cur <= prev)) return false;
        if (!flag && (cur % 2 != 0 || cur >= prev)) return false;
        map.put(idx, root.val);
        if (root.left != null && !dfs(root.left, idx + 1)) return false;
        if (root.right != null && !dfs(root.right, idx + 1)) return false;
        return true;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值