230.二叉搜索树中第k小的元素
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(k 从 1 开始计数)。
思路
k--应该在访问该节点之前,否则,在递归结束之后可能k==1的情况可能再次出现
java对于普通变量是传递形参
- 解决变量值传递的问题,可以用全局变量或者数组
方法1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { int ans=0; int count=0; public int kthSmallest(TreeNode root, int k) { count=k; midSearch(root); return ans; } private void midSearch(TreeNode root){ if(root==null) return; midSearch(root.left); count--; if(count==0) { ans=root.val; return; } midSearch(root.right); } }
|
方法2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public int kthSmallest(TreeNode root, int k) { int[] nums=new int[2]; nums[0]=k; midSearch(root,nums); return nums[1]; } private void midSearch(TreeNode root,int[] nums){ if(root==null) return; midSearch(root.left,nums); nums[0]--; if(nums[0]==0) { nums[1]=root.val; return; } midSearch(root.right,nums); return; } }
|