找出二叉搜索树中出现最频繁的节点。在BST中有左节点<=根节点<=右节点
Find the most frequently occurring element in a BST. In this BST we can have leftnode<=rootnode<=rightnode.
如果以中序遍历树,考虑已排序数组。统计最频繁节点。
If we traverse this BST with Inorder, we can consider this is sorted array.
#include <iostream>
using namespace std;
struct Node
{
Node* left;
Node*right;
int data;
Node(int val):data(val),left(NULL),right(NULL){}
};
int maxFreqVal;//出现次数最多的值
int maxFreqCount;//最多的次数
void inorder(Node* node,int &curFreqVal,int& curFreqCount)
{
if (node == NULL)
{
return ;
}
inorder(node->left,curFreqVal,curFreqCount);
if (curFreqVal != node->data)//如果考察的值不等于遍历到的节点的值
{
curFreqCount = 1;
curFreqVal = node->data;
}
else
{//如果考察的值等于遍历到的节点的值
curFreqCount++;
if (curFreqCount>maxFreqCount)
{//更新最大的频率
maxFreqCount = curFreqCount;
maxFreqVal = curFreqVal;
}
}
inorder(node->right,curFreqVal,curFreqCount);
}
int getFreq(Node * root)
{
if (root = NULL)
{
return -1;
}
int curFreqVal = -1;//不一定要为-1 只要未在树中出现的值就行
int curFreqCount = -1;
inorder(root,curFreqVal,curFreqCount);
return maxFreqVal;
}