剑指offer系列之六十一:二叉树搜索树的第k个节点

简介:

题目描述

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

因为二叉搜索树是排序的,所以如果需要找出第k个节点只需要进行中序遍历就可以得到第k节点。不过中序遍历的结果就是排序的,所以实质上就是插入排序。可以利用一个集合,在遍历的过程中利用插入排序的算法就能得到第k个节点。下面是这种实现思路的实现代码(已被牛客AC):

public class Solution {
    //采用非递归中序遍历的方式得到第k大的节点
    TreeNode KthNode(TreeNode pRoot, int k) {
        if(pRoot== null) return pRoot;
        //创建一个变量指向第k大的节点
        int p = 0;
        //创建一个栈用于保存遍历的顺序
        Stack<TreeNode> s = new Stack<TreeNode>();
        TreeNode curNode = pRoot;
        while(curNode != null || !s.isEmpty()){
            while(curNode != null){
                s.add(curNode);
                curNode = curNode.left;
            }
            if(!s.isEmpty()){
                curNode = s.pop();
                p++;
                if(p == k) return curNode;
                curNode = curNode.right;
            }
        }
        return null;
    }


}
AI 代码解读
目录
打赏
0
0
0
0
85
分享
相关文章
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
【数据结构】二叉树的·深度优先遍历(前中后序遍历)and·广度优先(层序遍历)
文章目录 一、二叉树的深度优先遍历 🌺1.前序遍历 (1)`先序遍历`的过程: (2)流程图: (3)代码: (4)测试结果: 🌼2.中序遍历 (1)`中序遍历`的过程: (2)代码: (3)测试结果: 🌻3.后序遍历
代码随想录训练营day21| 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先...
代码随想录训练营day21| 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先...
Java数据结构与算法分析(九)AVL树(平衡二叉树)
AVL(Adelson-Velskii 和 Landis)树是带有平衡条件的二叉查找树,又叫做平衡二叉树。在AVL树中任何节点的两个子树高度差最多为1,所以它又被称为高度平衡树。
144 0
一篇文章带你玩转二叉树的层序遍历 | 十道题巩固练习(一)
一篇文章带你玩转二叉树的层序遍历 | 十道题巩固练习
145 0
一篇文章带你玩转二叉树的层序遍历 | 十道题巩固练习(二)
一篇文章带你玩转二叉树的层序遍历 | 十道题巩固练习
76 0
在二叉树(搜索树)中找到两个节点的最近公共祖先(剑指offer)
在二叉树(搜索树)中找到两个节点的最近公共祖先(剑指offer)
136 0
在二叉树(搜索树)中找到两个节点的最近公共祖先(剑指offer)
【Java数据结构】二叉树到底是什么品种的树?以及二叉树有哪些基操
【Java数据结构】二叉树到底是什么品种的树?以及二叉树有哪些基操
【Java数据结构】二叉树到底是什么品种的树?以及二叉树有哪些基操
二叉树及二叉树遍历的基础解读
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。 二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点 。
170 0
二叉树及二叉树遍历的基础解读
力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法
力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法
123 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等