二叉搜索树的第k个结点

题目描述

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

思路

非递归中序遍历二叉树的应用。

时间复杂度O(lgn),空间复杂度O(lgn)。

代码

import java.util.LinkedList;
/*
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)
    {
        LinkedList<TreeNode> stack = new LinkedList<>();
        TreeNode curr = pRoot;
        int index = 0;
        while(!stack.isEmpty() || curr != null) {
            while(curr != null) {
                stack.push(curr);
                curr = curr.left;
            }
            curr = stack.pop();
            index++;
            if(index == k) {
                return curr;
            } else {
                curr = curr.right;
            }
        }
        return null;
    }
}

笔记

原文地址:https://www.cnblogs.com/ustca/p/12761496.html