二叉搜索樹中兩個節點之和

題目描述

給定一個二叉搜索樹的 根節點 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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章