剑指offer_二叉树---二叉搜索树的第k个结点

简介: 剑指offer_二叉树---二叉搜索树的第k个结点

题目描述

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

解题思路

1,二叉搜索树的中序遍历是排序的,所以先进行中序遍历得到一个有序list

2,在该list里查找到第k个

代码

/**
 * 
 */
package 二叉树;
import java.util.ArrayList;
/**
 * 给定一颗二叉搜索树,请找出其中的第k大的结点。
 * 例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
 */
public class KthNode {
    /**
     * void
     * 
     * @param args
     */
    TreeNode IntKthNode(TreeNode pRoot, int k) {
        if(pRoot==null||k<=0){
            return null;
        }
        ArrayList<TreeNode> list = new ArrayList<TreeNode>();
        insort(pRoot, list);
        if(k>list.size()){     
            return null;
        }
        return list.get(k - 1);    //中序遍历后把第k个返回
    }
    /**
     * 中序遍历 void
     * 
     * @param args
     */
    public void insort(TreeNode pRoot, ArrayList<TreeNode> list) {
        if (pRoot == null) {
            return;
        }
        insort(pRoot.left, list);
        list.add(pRoot);
        insort(pRoot.right, list);
    }
    public static void main(String[] args) {
        TreeNode pRoot = new TreeNode(5);
         pRoot.left = new TreeNode(3);
         pRoot.right = new TreeNode(7);
         pRoot.left.left = new TreeNode(2);
         pRoot.left.right = new TreeNode(4);
         pRoot.right.left = new TreeNode(6);
         pRoot.right.right = new TreeNode(8);
         KthNode k = new KthNode();
         int a = k.IntKthNode(pRoot, 3).val;
         System.out.println(a);
    }
}

易错点

一定要注意list和k的边界条件,k不能大于list的size也不能小于等于0

相关文章
|
7月前
【力扣刷题】二叉树的中序遍历、二叉树的最大深度、翻转二叉树、对称二叉树
【力扣刷题】二叉树的中序遍历、二叉树的最大深度、翻转二叉树、对称二叉树
43 0
|
7月前
|
算法 API DataX
二叉树(下)+Leetcode每日一题——“数据结构与算法”“对称二叉树”“另一棵树的子树”“二叉树的前中后序遍历”
二叉树(下)+Leetcode每日一题——“数据结构与算法”“对称二叉树”“另一棵树的子树”“二叉树的前中后序遍历”
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题
先来一题简单的题目练练手,之前有提到过,二叉树的前序遍历就是通过根左右的遍历方式来进行的,所以这题总体思路也是一样.不过要说明的是,这里采用了c语言,所以输出时需要自己创建一个动态数组,每次将访问到的val存入动态数组当中即可.
58 0
|
7月前
|
存储 Serverless 索引
二叉树的前序遍历 、二叉树的最大深度、平衡二叉树、二叉树遍历【LeetCode刷题日志】
二叉树的前序遍历 、二叉树的最大深度、平衡二叉树、二叉树遍历【LeetCode刷题日志】
|
7月前
二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)
二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)
37 0
|
7月前
二叉树OJ题:LeetCode--104.二叉树的最大深度
二叉树OJ题:LeetCode--104.二叉树的最大深度
39 0
|
7月前
二叉树OJ题:LeetCode--144.二叉树的前序遍历
二叉树OJ题:LeetCode--144.二叉树的前序遍历
45 0
LeetCode刷题Day14——二叉树(完全二叉树、平衡二叉树、二叉树路径、左叶子之和)
一、完全二叉树的节点个数 题目链接:222. 完全二叉树的节点个数
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅳ
本章依然是二叉树的刷题 忘记的朋友们可以去看看我的二叉树专题
62 0
剑指offer_二叉树---二叉搜索树的后序遍历
剑指offer_二叉树---二叉搜索树的后序遍历
70 0