Leetcode 1609 奇偶树

18 篇文章 0 订阅
题目

如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :

二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。
偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增
奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减
给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。

解题思路

  BFS和DFS都可以写,DFS有递归会涉及到重复遍历的过程,BFS的优势就体现出来了。但这里只贴了DFS的解法,练一手递归。

  DFS遍历过程中,把层数也加到状态中,先判断奇偶性,再用一个数组来维护每一层从左到右上一个节点的值,对其进行比较。

  BFS遍历过程中,对每个节点层数予以层数状态,也是先判断奇偶性,再用数组来维护每一层从左到右上一个节点的值,对其进行比较。

代码
class Solution {
    private Map<Integer, Integer> map = new HashMap<>();

    public boolean isEvenOddTree(TreeNode root) {
        return dfs(root, 0);
    }

    private boolean dfs(TreeNode root, int deep) {
        if (root == null) return true;

        if ((deep + root.val) % 2 != 1) return false;
        if (deep % 2 == 0) {
            int pre = map.getOrDefault(deep, 0);
            if (root.val <= pre) return false;
            else map.put(deep, root.val);
        } else {
            int pre = map.getOrDefault(deep, Integer.MAX_VALUE);
            if (root.val >= pre) return false;
            else map.put(deep, root.val);
        }
        return dfs(root.left, deep + 1) && dfs(root.right, deep + 1);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值