二叉搜索树的第k个结点

来源:互联网 发布:北京供销大数据怎么样 编辑:程序博客网 时间:2024/06/06 09:23

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

import java.util.Stack;/** * 中序遍历寻找第k小的数 *  * @author 过路的守望 * */public class InOrderTraversal {    /*     * 二叉树的中序遍历是从小到大的,可通过中序遍历来寻找第k小的节点。     */    public TreeNode getKthNode(TreeNode pRoot, int k) {        if (pRoot == null || k <= 0) {            return null;        }        TreeNode cur = pRoot;        int p = 0;        Stack<TreeNode> stack = new Stack<TreeNode>();        while (cur != null || !stack.isEmpty()) {            while (cur != null) {                stack.push(cur);                cur = cur.left;            }            cur = stack.pop();            p++;            if (p == k) {                return cur;            }            cur = cur.right;        }        return null;    }    private static class TreeNode {        int val = 0;        TreeNode left = null;        TreeNode right = null;        public TreeNode(int val) {            this.val = val;        }    }}
0 0
原创粉丝点击