938-二叉搜索樹的範圍和

前言

Weekly Contest 110的第二題 二叉搜索樹的範圍和數組

給定二叉搜索樹的根結點 root,返回 LR(含)之間的全部結點的值的和。日誌

二叉搜索樹保證具備惟一的值。code

返回日誌的最終順序遞歸

示例1:leetcode

輸入:root = [10,5,15,3,7,null,18], L = 7, R = 15
輸出:32

示例2:get

輸入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
輸出:23

提示:test

  1. 樹中的結點數量最多爲 10000 個。
  2. 最終的答案保證小於 2^31

解題思路

本題我選擇了一個笨方法去完成,就是利用二叉搜索樹的一個特性:經過中序遍歷二叉搜索樹後能夠獲得一個遞增的有序序列。因此我選擇了中序遍歷二叉搜索樹得到遞增且有序的數組,而後遍歷數組獲取須要的數組元素進行累加。List

實現代碼

/**
     * 938. 二叉搜索樹的範圍和
     * @param root
     * @param L
     * @param R
     * @return
     */
    public int rangeSumBST(TreeNode root, int L, int R) {
        List<Integer> list=new ArrayList<Integer>();
        int result=0;
        if(root!=null){
            inorderTraversal(root,list);
        }
        for(int i:list){
            if(i>=L && i<=R){
                result+=i;
            }
        }
        return result;
    }

    /**
     * 中序遍歷(遞歸)
     * @param root
     * @param list
     */
    private void inorderTraversal(TreeNode root,List<Integer> list){
        if(root.left==null && root.right==null){
            list.add(root.val);
        }else if(root.left==null && root.right!=null){
            list.add(root.val);
            inorderTraversal(root.right,list);
        }else if(root.left!=null && root.right==null){
            inorderTraversal(root.left,list);
            list.add(root.val);
        }else{
            inorderTraversal(root.left,list);
            list.add(root.val);
            inorderTraversal(root.right,list);
        }
    }
相關文章
相關標籤/搜索