Weekly Contest 110的第二題 二叉搜索樹的範圍和:數組
給定二叉搜索樹的根結點
root
,返回L
和R
(含)之間的全部結點的值的和。日誌二叉搜索樹保證具備惟一的值。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
- 樹中的結點數量最多爲
10000
個。- 最終的答案保證小於
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); } }