Get Node Between Range in BST

题目:
再一个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

Popular Posts