LeetCode-在受污染的二叉树中查找元素

在受污染的二叉树中查找元素

LeetCode-1261

/**
 * 给出一个满足下述规则的二叉树:
 * root.val == 0
 * 如果 treeNode.val == x 且?treeNode.left != null,那么?treeNode.left.val == 2 * x + 1
 * 如果 treeNode.val == x 且 treeNode.right != null,那么?treeNode.right.val == 2 * x + 2
 * 现在这个二叉树受到「污染」,所有的?treeNode.val?都变成了?-1。
 * 请你先还原二叉树,然后实现?FindElements?类:
 * FindElements(TreeNode* root)?用受污染的二叉树初始化对象,你需要先把它还原。
 * bool find(int target)?判断目标值?target?是否存在于还原后的二叉树中并返回结果。
 **/
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
#include<map>
using namespace std;
// Definition for a binary tree node.
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
/**
       0
     /       1     2
   /   3  4
**/
class FindElements {
private:
    map<int,int>ma;
    void DFS(TreeNode* root){
        if(root->left){
            root->left->val=2*(root->val)+1;
            ma[root->left->val]++;
            DFS(root->left);
        }
        if(root->right){
            root->right->val=2*(root->val)+2;
            ma[root->right->val]++;
            DFS(root->right);
        }
    }
public:
    FindElements(TreeNode* root) {
        root->val=0;
        ma[0]++;
        DFS(root);

    }
    bool find(int target) {
        return ma[target];
    }

};
int main(){
    TreeNode* t1=new TreeNode(-1);
    TreeNode* t2=new TreeNode(-1);
    TreeNode* t3=new TreeNode(-1);
    TreeNode* t4=new TreeNode(-1);
    TreeNode* t5=new TreeNode(-1);
    t2->left=t4;t2->right=t5;
    t1->left=t2;t1->right=t3;
    FindElements* obj = new FindElements(t1);
    cout<<obj->find(3)<<endl;

    system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/GarrettWale/p/12364303.html

时间: 2024-08-04 11:39:23

LeetCode-在受污染的二叉树中查找元素的相关文章

Leetcode题目34.在排序数组中查找元素的第一个和最后一个位置(中等)

题目描述: 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [-1, -1]. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2: 输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1] 题目解析: 方法 1:线性扫描 对 target 检查每

【LeetCode】34. 在排序数组中查找元素的第一个和最后一个位置

题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是?O(log n) 级别. 如果数组中不存在目标值,返回?[-1, -1]. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例?2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: [-1,-1] 本题同[剑指Offer]面试题53 - I. 在排序数组

[leetcode] 34. 在排序数组中查找元素的第一个和最后一个位置(Java)

34. 在排序数组中查找元素的第一个和最后一个位置 题目要求用O(logn),明显要用二分. 其实二分不难,难的是要处理好边界 class Solution { public int[] searchRange(int[] nums, int target) { int i = 0, j = nums.length; int mid = (i + j) / 2; int p = -1; while (i < j) { if (nums[mid] == target) { p = mid; bre

数据结构:单向链表系列5--在链表中查找元素

在链表中查找元素 函数签名: bool search(Node *head, int x) 如果在链表中查找到这个元素返回true,否则false 迭代法 2) 初始化一个节点指针, current = head. 3) 如果current不为NULL执行以下循环 a) current->key 等于当前待查找值key则返回true. b) current = current->next 4) 否则返回 false /*Checks whether the value key is prese

在排序数组中查找元素

/* 34.在排序数组中查找元素的第一个和最后一个位置. 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [-1, -1]. */ #include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> #include<mat

杨氏矩阵中查找元素

在杨氏矩阵中查找一个元素是否存在 杨氏矩阵即每一行均以递增顺序排列,每列从上到下也为递增顺序 方法一:数组 #include<stdio.h> #include<stdlib.h> #define COLS 3 #define ROWS 3 //要查找只要在找到右上角的元素和输入元素进行比较.如果右上角元素大,即可排除其他行,若小 //,则可排除本行,继续循环,用输入元素和右上角的元素进行比较 int find(int arr[][COLS], int rows, int cols

_DataStructure_C_Impl:在顺序表中查找元素

// _DataStructure_C_Impl:Search #include<stdio.h> #include<stdlib.h> #define MaxSize 100 #define IndexSize 20 typedef int KeyType; //元素的定义 typedef struct{ KeyType key; }DataType; //顺序表的类型定义 typedef struct{ DataType list[MaxSize]; int length; }

leetcode(18)-在排序数组中查找元素

给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是?O(log n) 级别. 如果数组中不存在目标值,返回?[-1, -1]. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处

LeetCode(124):二叉树中的最大路径和

Hard! 题目描述: 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不需要经过根节点. 示例 1: 输入: [1,2,3] 1 / 2 3 输出: 6 示例 2: 输入: [-10,9,20,null,null,15,7]   -10    /   9  20     /     15   7 输出: 42 解题思路: 这道求二叉树的最大路径和是一道蛮有难度的题,难就难在起始位置和结束位置可以为任意位置,像这种