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

来源:互联网 发布:深入解析wpf编程 pdf 编辑:程序博客网 时间:2024/06/16 16:24

题目描述

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

解题思路

二叉搜索树的中序遍历得到的结果就是以小到大的排序顺序,因此可以使用中序遍历,每次遍历记录当前结点是第几个结点,当到期望的结点时,返回。

实现

/*树结点的定义*/public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}/*实现*/public class Solution {    TreeNode KthNode(TreeNode pRoot, int k)    {        Result re = kThNode(pRoot, k, 0);        return re.node;    }    private Result kThNode(TreeNode pRoot, int k, int cur) {        if (pRoot == null) return new Result(null, cur);        Result rl = kThNode(pRoot.left, k , cur);        if (rl.k == k) return rl;        cur = rl.k + 1;        if (cur == k) return new Result(pRoot, k);        Result rr =  kThNode(pRoot.right, k, cur);        if (rr.k == k) return rr;        return new Result(null,rr.k);    }    private class Result{        TreeNode node;        int k; //第几个数据        public Result(TreeNode node, int k){            this.node = node;            this.k = k;        }    }}
0 0
原创粉丝点击