首页 > 其他分享 >二叉搜索树中两个节点之和

二叉搜索树中两个节点之和

时间:2023-03-25 21:44:34浏览次数:42  
标签:TreeNode val int root list 二叉 树中 节点

题目描述

给定一个二叉搜索树的 根节点 root 和一个整数 k , 请判断该二叉搜索树中是否存在两个节点它们的值之和等于 k 。假设二叉搜索树中节点的值均唯一。参考leetcode

分析

  1. 中序遍历二叉树,将节点的 value 保存到 ArrayList 中,ArrayList 中元素是有序的。
  2. 采用双指针法,判断 ArrayList 中是否存在两个元素的和为 k。可参考:找出数组中两数之和为指定值的所有整数对

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean findTarget(TreeNode root, int k) {
        List<Integer> list = new ArrayList<>();

        //中序遍历二叉树
        inOrder(root, list);
        int i = 0;
        int j = list.size()-1;

        boolean exist = false;
        while(i < j){
            int sum = list.get(i) + list.get(j);
            if(sum > k){
                j--;
            }else if(sum < k){
                i++;
            }else{
                exist = true;
                break;
            }
        }
        return exist;
    }

    //中序遍历二叉树
    private void inOrder(TreeNode root, List<Integer> list){
        if(root == null){
            return;
        }
        inOrder(root.left, list);
        //将二叉树遍历的节点 val 保存到 list, 中序遍历得到有序的 list
        list.add(root.val);
        inOrder(root.right, list);
    }
}

标签:TreeNode,val,int,root,list,二叉,树中,节点
From: https://www.cnblogs.com/hapjin/p/17255683.html

相关文章

  • 力扣---剑指 Offer 32 - III. 从上到下打印二叉树 III
    请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树:......
  • java——spring boot集成kafka——单节点示例
    首先安装一个zk。然后再安装kafka:   执⾏以下命令创建名为“test”的topic,这个topic只有⼀个partition,并且备份因⼦也设置为1: 然后在kafka节点下,执行如下命令:......
  • 平衡二叉树 -(avltree)
    AVL树简介AVL树的名字来源于发明作者G.M.Adelson-Velsky和E.M. Landis的缩写。AVL树是最先发明的自平衡二叉查找树(Self-BalancingBinarySearchTree,简称平衡二叉树......
  • LeetCode. 102二叉树的层序遍历
    1.题目:给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]来源:力扣(L......
  • 快慢指针-lc876链表的中间节点
    给你单链表的头结点head,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例1:输入:head=[1,2,3,4,5]输出:[3,4,5]解释:链表只有一个中间......
  • day23 打卡669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转
    day23打卡669.修剪二叉搜索树108.将有序数组转换为二叉搜索树538.把二叉搜索树转换为累加树669.修剪二叉搜索树669题目链接1.迭代法classSolution{public......
  • 每日一题-leetcode 单值二叉树
    如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回false。示例1:输入:[1,1,1,1,1,null,1]输出:true示例2:输......
  • 【leetcode-链表】两两交换链表中的节点
    题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例:1->2->3->42->1->4->3思路:首先需要建......
  • elasticsearch集群扩展新节点
    原集群配置     原来集群的节点不需要做任何修改和重启服务,新节点符合条件会自动加入集群新节点配置    配置文件的集群名字和nodename配置好即可c......
  • m基于时空特性的WSN网络节点故障诊断matlab仿真
    1.算法描述       无线传感网络节点由传感器模块、处理器模块、通信模块、存储模块和电源模块构成,处理器模块是节点的核心单元。 ①传感器模块:负责整个监测区域......