zoukankan      html  css  js  c++  java
  • 剑指 Offer 54. 二叉搜索树的第k大节点 树的遍历

    地址  https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/

    给定一棵二叉搜索树,请找出其中第k大的节点。
    
    示例 1:
    输入: root = [3,1,4,null,2], k = 1
       3
      / 
     1   4
      
       2
    输出: 4
    
    示例 2:
    输入: root = [5,3,6,2,4,null,null,1], k = 3
           5
          / 
         3   6
        / 
       2   4
      /
     1
    输出: 4
     
    
    限制:
    1 ≤ k ≤ 二叉搜索树元素个数

    解答 

    由二叉搜索树的定义可得知
    根的右子树的节点都比根节点大
    根的左子树的节点都比根节点小
    那么我们按照右 根 左的次序遍历树
    就可以得到由大到小的节点排序序列
    我们输出倒数第K个节点就是第K大的节点

      3
      / 
     1   4
      
       2
    
    
    
           5
          / 
         3   6
        / 
       2   4
      /
     1
    class Solution {
    public:
        int ans = 0;  
        int kk;  
        void dfs(TreeNode* root)
        {
            if(root==NULL)  return;
            dfs(root->right);
            kk -= 1;
            if(kk==0){   ans = root->val;}
            dfs(root->left);
            return;
        }
    
        int kthLargest(TreeNode* root, int k) {
            kk = k;
            dfs(root);
            return ans;
        }
    };
     
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    oracle 存储过程
    交错数组
    延迟加载
    js 闭包
    引用类型和值类型
    事务
    web api 之身份验证
    SQLServer中的服务器角色与数据库角色
    按照某一字段的相同值合并所对应的行的值
    VC工程中的字符集工程属性和字符编码(转)
  • 原文地址:https://www.cnblogs.com/itdef/p/14457400.html
Copyright © 2011-2022 走看看