二叉搜索树中两个节点之和
题目描述
给定一个二叉搜索树的 根节点 root 和一个整数 k , 请判断该二叉搜索树中是否存在两个节点它们的值之和等于 k 。假设二叉搜索树中节点的值均唯一。参考leetcode
分析
- 中序遍历二叉树,将节点的 value 保存到 ArrayList 中,ArrayList 中元素是有序的。
- 采用双指针法,判断 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);
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 欧阳的2024年终总结,迷茫,重生与失业
· Bolt.new 30秒做了一个网站,还能自动部署,难道要吊打 Cursor?
· 史上最全的Cursor IDE教程
· 关于产品设计的思考
· 我的编程之路 2024