这次是二叉搜索树的遍历
感觉只要和二叉搜索树的题目,都要用到一个重要性质:
中序遍历二叉搜索树的结果是一个递增序列;
而且要注意,在递归遍历树的时候,有些参数如果是要随递归不断更新(也就是如果递归返回上层,参数也需要最新的),就要用全局变量,而不是传参,其实这就是全局变量的定义。
不过如果是保存每层递归内的信息,就需要传参数。
本题显然是需要全局参数
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { /* 思路还是利用二叉搜索树的重要性质: 中序遍历的结果是一个递增序列 比较当前元素和上个元素的数判断是不是同一个数,记录每个数出现的次数 根据次数,不断更新最后的结果 */ List<Integer> res = new ArrayList<>(); int pre = Integer.MIN_VALUE; int cur = 0; int max = 0; public int[] findMode(TreeNode root) { if (root==null) return new int[0]; inOrder(root); int[] a = new int[res.size()]; for (int i = 0; i < res.size(); i++) { a[i] = res.get(i); } return a; } public void inOrder(TreeNode root) { if (root==null) return; System.out.println(pre); inOrder(root.left); if (root.val==pre) { cur++; } else cur=1; pre = root.val; if (cur>max) { max = cur; res.clear(); res.add(root.val); } else if (cur==max) { res.add(root.val); } inOrder(root.right); } }