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

题目描述

给定一个二叉搜索树的 根节点 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);
    }
}
posted @   大熊猫同学  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示