package com.interview.books.svinterview; import com.interview.leetcode.utils.TreeNode; import java.util.Stack; /** * Created_By: stefanie * Date: 14-12-8 * Time: 下午8:21 */ public class SV19_BST2SUM { public void find(TreeNode root, int K){ if(root == null) return; Stack<TreeNode> leftStack = new Stack<>(); Stack<TreeNode> rightStack = new Stack<>(); populateLeft(root, leftStack); populateRight(root, rightStack); do{ int sum = leftStack.peek().val + rightStack.peek().val; if(sum == K){ System.out.println(leftStack.peek().val + " + " + rightStack.peek().val); TreeNode largest = rightStack.pop(); populateRight(largest.left, rightStack); TreeNode smallest = leftStack.pop(); populateLeft(smallest.right, leftStack); } else if(sum > K){ TreeNode largest = rightStack.pop(); populateRight(largest.left, rightStack); } else { TreeNode smallest = leftStack.pop(); populateLeft(smallest.right, leftStack); } } while(!leftStack.isEmpty() && !rightStack.isEmpty() && leftStack.peek().val < rightStack.peek().val); } public void populateRight(TreeNode node, Stack<TreeNode> nodes){ while(node != null){ nodes.push(node); node = node.right; } } public void populateLeft(TreeNode node, Stack<TreeNode> nodes){ while(node != null){ nodes.push(node); node = node.left; } } public static void main(String[] args){ SV19_BST2SUM finder = new SV19_BST2SUM(); TreeNode root = TreeNode.sampleBST(); finder.find(root, 8); } }