[LeetCode]501. Find Mode in Binary Search Tree二叉搜索树寻找众数

这次是二叉搜索树的遍历

感觉只要和二叉搜索树的题目,都要用到一个重要性质:

中序遍历二叉搜索树的结果是一个递增序列;

而且要注意,在递归遍历树的时候,有些参数如果是要随递归不断更新(也就是如果递归返回上层,参数也需要最新的),就要用全局变量,而不是传参,其实这就是全局变量的定义。

不过如果是保存每层递归内的信息,就需要传参数。

本题显然是需要全局参数

/**
 * 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);
    }
}

 

posted @ 2018-01-22 16:18  stAr_1  阅读(157)  评论(0编辑  收藏  举报