在二叉查詢樹中尋找兩個節點,使它們的和為一個給定值
阿新 • • 發佈:2018-12-06
給定一個二叉搜尋樹和一個目標結果,如果 BST 中存在兩個元素且它們的和等於給定的目標結果,則返回 true。
使用中序遍歷得到有序陣列之後,再利用雙指標對陣列進行查詢。
應該注意到,這一題不能用分別在左右子樹兩部分來處理這種思想,因為兩個待求的節點可能分別在左右子樹中。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ 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; while(i<j){ int target=list.get(i)+list.get(j); if(target==k){ return true; }else if(target<k){ i++; }else{ j--; } } return false; } public void inOrder(TreeNode root,List<Integer> list){ if(root==null) return ; //先遍歷左子節點 inOrder(root.left,list); //加入根節點 list.add(root.val); //再加入右子節點 inOrder(root.right,list); } }