- HashSet
添加 add
是否存在 contains
删除 remove
清空 clear
public boolean dfs(TreeNode root, int target) {if (root == null) return false;if (set.contains(target - root.val)) return true;else set.add(root.val);return dfs(root.left, target) || dfs(root.right, target);}
- 双指针法 搜索树中序遍历
利用bst特性
ArrayDeque
在队列尾插入addLast
取出队列尾,不删除peekLast
取出队列尾并删除pollLast
public boolean findTarget(TreeNode root, int k) {Deque<TreeNode> leftdeque = new ArrayDeque<>(), rightdeque = new ArrayDeque<>();leftdeque.addLast(root);TreeNode node = root;while (node != null) {leftdeque.addLast(node);node = node.left;}node = root;while (node != null) {rightdeque.addLast(node);node = node.right;}TreeNode l = leftdeque.peekLast(), r = rightdeque.peekLast();while (l.val < r.val) {int t = l.val + r.val;if (t == k) return true;if (t < k) l = getNext(leftdeque, true);else r = getNext(rightdeque, false);}return false;}public TreeNode getNext(Deque<TreeNode> deque, boolean flag) {TreeNode node = flag ? deque.pollLast().right : deque.pollLast().left;while (node != null) {deque.addLast(node);node = flag ? node.left : node.right;}return deque.peekLast();}
