欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Jz54 二叉搜索树的第K个结点

Jz54 二叉搜索树的第K个结点

2025/2/5 18:00:02 来源:https://blog.csdn.net/weixin_49278191/article/details/141405023  浏览:    关键词:Jz54 二叉搜索树的第K个结点

描述

给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。

1.返回第k小的节点值即可

2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1

3.保证n个节点的值不一样

二叉搜索树的第k个节点_牛客题霸_牛客网

二叉搜索树值的特点:left < mid < right

思路:copy by 二叉搜索树的第k个节点_牛客题霸_牛客网

        根据二叉搜索树的性质,我们可以尝试递归中序遍历,也就是从最小的一个节点开始,找到k个就是我们要找的目标。

1.栈实现

	//Solution1: Stack Inorder  O(N) O(N)
int KthNode(TreeNode* proot, int k) {// write code hereif(!proot)return -1;TreeNode *pCur = proot;stack<TreeNode*>  treeStack;// treeStack.push(pCur);int cnt =  0;while(!treeStack.empty() || pCur ){while(pCur){treeStack.push(pCur);pCur = pCur->left;}TreeNode *popNode = treeStack.top();treeStack.pop();if(--k == 0)return popNode->val;pCur = popNode->right;}return -1;}

2.递归

	//Solution 2:inorder recursive O(N) O(N)int count = 0;TreeNode *res = nullptr;void findKthNode(TreeNode *proot, int k){ if(!proot || count > k) return;findKthNode(proot->left, k);if(++count == k) res = proot;findKthNode(proot->right, k);}int KthNode(TreeNode *proot, int k){findKthNode(proot, k);if(res) return res->val;else return -1;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com