首先,它是一个搜索二叉树,对于每一个根节点,总是满足,左节点比它小,右节点比它大。
我的方法是,中序遍历树“右、根、左”,从而得到树的节点值的降序排列。
其第k大节点的值即为遍历得到的数组的第k个值
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int kthLargest(struct TreeNode* root, int k){
struct TreeNode* stack[10000];
int top=-1;
int step=0,res=0;
while(root!=NULL||top!=-1)
{
while(root!=NULL)
{
stack[++top]=root;
root=root->right;
}
if(top!=-1)
{
root=stack[top--];
step++;
if(step==k)
{
res=root->val;
break;
}
root=root->left;
}
}
return res;
}
使用数组进行存储当数据量较大时,会浪费内存及时间。
这里使用了一个非递归的的方法来遍历树,也就不用存储其数值,只要读取第k个节点,即为输出值
结果: