zoukankan      html  css  js  c++  java
  • 剑指OFFER_二叉搜索树的第k个节点

    剑指OFFER_二叉搜索树的第k个节点

    题目描述

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

    思路

    对二叉搜索树进行排序,很自然就想到了中序遍历,即先输出左子树,然后根节点,最后右子树;

    那么要输出第k小的节点,就需要在最左边的节点开始计数,回溯到第k个时输出即可;

    那么为了从最小的节点开始计算,设置一个flag,当搜索到底层的时候设置flag,开始计数;

    然后当计数器达到k的时候,保存此节点并退出;

    不过程序还有待优化的地方,就是这里推出后,还会有后续的节点会继续遍历,可以考虑设置一个开关跳出递归;

    代码

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
        int t = 0, k = 0;
        bool flag = false;
        TreeNode* ans = NULL;
        void dfs(TreeNode* node) {
            if (!node) {
                flag = true;
                return;
            }
            dfs(node->left);
            if (flag) {
                ++t;
                if (t == k) {
                    ans = node;
                    return;
                }
            }
            dfs(node->right);
        }
        TreeNode* KthNode(TreeNode* pRoot, int k)
        {
            this->k = k;
            dfs(pRoot);
            return this->ans;
            
        }
    
        
    };
    
  • 相关阅读:
    xgboost
    GBDT 梯度提升决策树简述
    minimal pairs
    Describe your hometown
    英语短句
    英汉翻译
    英语音译词
    power的读音
    英语口语(英语词根与单词的说文解字(李平武 2008版)读书笔记)
    Jar包转成Dll的方式(带嵌套的jar也能做)
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13198339.html
Copyright © 2011-2022 走看看