0
点赞
收藏
分享

微信扫一扫

【leectode 2021.12.26】二叉搜索树中两个节点之和


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

示例 1:

输入: root = [8,6,10,5,7,9,11], k = 12
输出: true
解释: 节点 5 和节点 7 之和等于 12
示例 2:

输入: root = [8,6,10,5,7,9,11], k = 22
输出: false
解释: 不存在两个节点值之和为 22 的节点

提示:

二叉树的节点个数的范围是  [1, 10^4].
-10^4 <= Node.val <= 10^4
root 为二叉搜索树
-10^5 <= k <= 10^5

java代码:

class Solution {
    public boolean findTarget(TreeNode root, int k) {
        Set<Integer> set = new HashSet<>();
        TreeNode cur = root;
        while(cur != null){ //Morris中序遍历
            if(cur.left == null){ //cur没有左子树
                if(set.contains(k - cur.val)) return true; //匹配成功
                set.add(cur.val); //匹配失败,记录cur
                cur = cur.right;  //去cur的右子树
            }else{
                //cur有左子树,处理左子树
                TreeNode p = cur.left;
                while(p.right!=null && p.right!=cur) p = p.right;
                if(p.right == null){
                    //第一次来
                    p.right = cur;   //建立线索
                    cur = cur.left;  //继续处理左子树
                }else{
                    //第二次来
                    p.right = null;  //收回线索
                    if(set.contains(k - cur.val)) return true; //匹配成功
                    set.add(cur.val); //匹配失败,记录cur
                    cur = cur.right;  //去cur的右子树
                }
            }
        }
        return false;
    }
}


举报

相关推荐

0 条评论