zoukankan      html  css  js  c++  java
  • 61二叉搜索树的第k个结点

    题目描述

    给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / 3 7 / / 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
    思路:二叉搜索树的中序遍历是递增的序列,使用循环的中序遍历找到第k个节点就行了,对中序遍历的循环版本没理解,使用一个stack,找到最左边的节点,所以初始化的时候首先初始化节点,stack要为空。计数的cnt要初始化为0。不清楚的话就一个节点的时候判断一下,然后p = p->right,不需要判断为空,因为为空的话,上面的循环不会进入。
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
        TreeNode* KthNode(TreeNode* pRoot, int k){
            if(pRoot == nullptr){
                return nullptr;
            }
            stack<TreeNode*> s;  
            //s.push(pRoot);
            TreeNode* p = pRoot;
            int cnt = 0;
            while(!s.empty() || p != nullptr){
                while(p != nullptr){
                    s.push(p);
                    p = p->left;
                                  
                }
                if(!s.empty()){
                    p = s.top();
                    s.pop();                
                    ++cnt;
                    if(cnt == k){
                        return p;
                    }                 
                    p = p->right; 
                }
            }
            return nullptr;
        }    
    };
  • 相关阅读:
    ServletContext
    PS切图
    session实战案例
    Array Destruction
    Session详解
    No More Inversions 全网最详细 回文序列的逆序对
    Sum of Paths (DP、预处理)
    cookie详解
    web的状态管理
    简单最大流/最小割复习
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8310982.html
Copyright © 2011-2022 走看看