剑指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

相关文章
|
11月前
|
算法
【LeetCode题目详解】(五)144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历、104.二叉树的最大深度、110.平衡二叉树
【LeetCode题目详解】(五)144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历、104.二叉树的最大深度、110.平衡二叉树
47 0
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题
先来一题简单的题目练练手,之前有提到过,二叉树的前序遍历就是通过根左右的遍历方式来进行的,所以这题总体思路也是一样.不过要说明的是,这里采用了c语言,所以输出时需要自己创建一个动态数组,每次将访问到的val存入动态数组当中即可.
53 0
LeetCode刷题Day14——二叉树(完全二叉树、平衡二叉树、二叉树路径、左叶子之和)
一、完全二叉树的节点个数 题目链接:222. 完全二叉树的节点个数
剑指offer-7.二叉树的下一个节点
剑指offer-7.二叉树的下一个节点
32 1
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅳ
本章依然是二叉树的刷题 忘记的朋友们可以去看看我的二叉树专题
53 0
剑指offer_二叉树---二叉搜索树的后序遍历
剑指offer_二叉树---二叉搜索树的后序遍历
66 0
|
算法
剑指offer_二叉树---平衡二叉树
剑指offer_二叉树---平衡二叉树
66 0
剑指offer_二叉树---二叉树的下一节点
剑指offer_二叉树---二叉树的下一节点
63 0
剑指offer_二叉树---二叉搜索树与双向链表
剑指offer_二叉树---二叉搜索树与双向链表
56 0
剑指offer 58. 二叉搜索树的第k个结点
剑指offer 58. 二叉搜索树的第k个结点
51 0