2024.3.12力扣每日一题——在受污染的二叉树中查找元素

题目来源

力扣每日一题;题序:1261

我的题解

方法一 深度优先遍历+哈希表

使用深度优先遍历重构原始二叉树,然后在重构过程中使用Set记录有哪些元素。

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

class FindElements {
    Set<Integer> set;
    public FindElements(TreeNode root) {
        set=new HashSet<>();
        dfs(root,0);
    }
    
    public boolean find(int target) {
        return set.contains(target);
    }
    public void dfs(TreeNode root,int x){
        if(root==null)
            return ;
        root.val=x;
        set.add(x);
        dfs(root.left,2*x+1);
        dfs(root.right,2*x+2);
    }
}
方法二 深度优先遍历+位运算

细节参考官方题解

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

class FindElements {
    private TreeNode root;

    public FindElements(TreeNode root) {
        dfs(root, 0);
        this.root = root;
    }
    
    public boolean find(int target) {
        target++;
        int k = 30 - Integer.numberOfLeadingZeros(target);
        TreeNode node = root;
        while (k >= 0 && node != null) {
            if ((target & (1 << k)) == 0) {
                node = node.left;
            } else {
                node = node.right;
            }
            k--;
        }
        return node != null;
    }

    private void dfs(TreeNode node, int val) {
        if (node == null) {
            return;
        }
        node.val = val;
        dfs(node.left, val * 2 + 1);
        dfs(node.right, val * 2 + 2);
    }
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 16:16:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 16:16:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 16:16:02       82 阅读
  4. Python语言-面向对象

    2024-04-04 16:16:02       91 阅读

热门阅读

  1. pytorch读写文件

    2024-04-04 16:16:02       34 阅读
  2. Composer常见错误及解决方法

    2024-04-04 16:16:02       41 阅读
  3. Linux初学(十三)中间件

    2024-04-04 16:16:02       39 阅读
  4. var let 在 for 循环中的区别

    2024-04-04 16:16:02       37 阅读
  5. VMware虚拟机三种网络模式

    2024-04-04 16:16:02       36 阅读