1. 程式人生 > >[LeetCode]501. Find Mode in Binary Search Tree二叉搜索樹尋找眾數

[LeetCode]501. Find Mode in Binary Search Tree二叉搜索樹尋找眾數

pri fin lis 需要 efi lee value spa find

這次是二叉搜索樹的遍歷

感覺只要和二叉搜索樹的題目,都要用到一個重要性質:

中序遍歷二叉搜索樹的結果是一個遞增序列;

而且要註意,在遞歸遍歷樹的時候,有些參數如果是要隨遞歸不斷更新(也就是如果遞歸返回上層,參數也需要最新的),就要用全局變量,而不是傳參,其實這就是全局變量的定義。

不過如果是保存每層遞歸內的信息,就需要傳參數。

本題顯然是需要全局參數

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

[LeetCode]501. Find Mode in Binary Search Tree二叉搜索樹尋找眾數