Get Node Between Range in BST
题目:
再一个bst中,给你一个lower bound 和upper bound,返回list of nodes。这些node的值在这个range之间。用iterative和recursive两种方法实现。
解题思路:
用iteration的写法就是用stack来实现。
代码:
再一个bst中,给你一个lower bound 和upper bound,返回list of nodes。这些node的值在这个range之间。用iterative和recursive两种方法实现。
解题思路:
用iteration的写法就是用stack来实现。
代码:
public class GetNodeBetweenRangeinBST { // iterative public List<Integer> getNodeInteration(TreeNode root, int lower, int upper){ Stack<TreeNode> stack = new Stack<>(); List<Integer> rst = new ArrayList<>(); TreeNode curr = root; while(!stack.isEmpty() || curr != null){ while(curr.left != null){ stack.push(curr); TreeNode temp = curr.left; curr.left = null; curr = temp; } if(curr.val >= lower && curr.val <= upper){ rst.add(curr.val); } if(curr.right != null){ curr = curr.right; } else{ if(!stack.isEmpty()){ curr = stack.pop(); } else{ break; } } } return rst; } // recursive public List<Integer> getNodeRecurtion(TreeNode root, int lower, int upper){ List<Integer> rst = new ArrayList<>(); TreeNode curr = root; helper(rst, curr, lower, upper); return rst; } private void helper(List<Integer> rst, TreeNode curr, int lower, int upper) { if(curr == null){ return; } helper(rst, curr.left, lower, upper); if(curr.val >= lower && curr.val <= upper){ rst.add(curr.val); } helper(rst, curr.right, lower, upper); } public static void main(String[] args){ TreeNode node4 = new TreeNode(4); TreeNode node1 = new TreeNode(1); TreeNode node2 = new TreeNode(2); TreeNode node3 = new TreeNode(3); TreeNode node5 = new TreeNode(5); TreeNode node6 = new TreeNode(6); TreeNode node7 = new TreeNode(7); node2.right = node3; node2.left = node1; node6.left = node5; node6.right = node7; node4.left = node2; node4.right = node6; GetNodeBetweenRangeinBST getNodeBetweenRangeinBST = new GetNodeBetweenRangeinBST(); List<Integer> rst = getNodeBetweenRangeinBST.getNodeRecurtion(node4, 3, 7); System.out.println(rst); } }

Comments
Post a Comment