Search range in binary search tree
Given two values k1 and k2 (where k1 < k2) and a root pointer to a Binary Search Tree. Find all the keys of tree in range k1 to k2. i.e. print all x such that k1<=x<=k2 and x is a key of given BST. Return all the keys in ascending order. Example For example, if k1 = 10 and k2 = 22, then your function should print 12, 20 and 22. / \ 22 / \ 12
遍历, 没用到bst的性质:
public ArrayList<Integer> searchRange(TreeNode root, int k1, int k2) { ArrayList<Integer> result = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); if (root == null) { return result; } TreeNode cur = root; while (! stack.isEmpty() || cur != null) { while (cur != null) { stack.push(cur); cur = cur.left; } cur = stack.pop(); //中序遍历的改动点 if (k1 <= cur.val && cur.val <= k2) { result.add(cur.val); } cur = cur.right; } return result;*/ }
递归
public ArrayList<Integer> searchRange(TreeNode root, int k1, int k2) { results = new ArrayList<Integer>(); helper(root, k1, k2); return results; } private void helper(TreeNode root, int k1, int k2) { if (root == null) { return; } if (root.val > k1) { helper(root.left, k1, k2); } if (root.val >= k1 && root.val <= k2) { results.add(root.val); } if (root.val < k2) { helper(root.right, k1, k2); } }