zoukankan      html  css  js  c++  java
  • 剑指offer系列——62.二叉搜索树的第k个结点

    Q:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
    T:
    中序遍历,递归:

        int count = 0;
    public:
        TreeNode* KthNode(TreeNode* pRoot, unsigned int k)
        {
            if(pRoot){ 
                    TreeNode *ret = KthNode(pRoot->left, k);
                    if(ret) return ret;//第k个出现在left里面
                    if(++count == k) return pRoot;
                    ret = KthNode(pRoot->right,k);
                    if(ret) return ret;
            }
            return nullptr;
        }
    

    非递归:

        TreeNode *KthNode(TreeNode *pRoot, int k) {
            if (pRoot == nullptr)
                return nullptr;
            stack<TreeNode *> s;
            s.push(pRoot);
            TreeNode *node = pRoot->left;
            while (node || !s.empty()) {
                if (node) {
                    s.push(node);
                    node = node->left;
                } else {
                    node = s.top();
                    s.pop();
                    k--;
                    if (k == 0) {
                        return node;
                    }
                    node = node->right;
                }
            }
            return nullptr;
        }
    
  • 相关阅读:
    Live2d Test Env
    关于word2vec的一些问题
    排序链表
    最长回文子串
    前缀树
    验证回文串
    最大子序和/积
    构建知识图谱-初学
    HMM-维特比算法理解与实现(python)
    跨存储后台迁移数据的三种方案
  • 原文地址:https://www.cnblogs.com/xym4869/p/12374205.html
Copyright © 2011-2022 走看看