LeetCode---Kth Smallest Element in a BST

本文介绍了一种通过中序遍历二叉搜索树来查找第K小节点的方法,包括算法思想和具体实现步骤。

题目大意:给出一颗二叉搜索树,找出其中第K小的数。

算法思想:

由二叉搜索树和中序遍历的性质可知,中序遍历二叉搜索树的结果是从小到大递增的序列,从而只需找到中序遍历的过程中的第K个节点即可。

中序遍历算法:

对于任意节点P,只要P不空则将其入栈,并指向其左孩子节点,直至P为空,然后取栈顶顶元素并出栈,然后对其右子树做上述同样的操作。按此过程重复直到栈为空为止。

代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
   
    int kthSmallest(TreeNode* root, int k) {
      int res=0,num=0;
      if(root==NULL) return 0;
      TreeNode* p=root;
      stack<TreeNode*> S;
      while(p!=NULL||!S.empty()){
          while(p!=NULL){
              S.push(p);
              p=p->left;
          }
          if(!S.empty()){
              p=S.top();
              ++num;
              if(num==k) {
                 res=p->val;
                 break;
              }
              S.pop();
              p=p->right;
          }
      }
      return res;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值