本题为剑指offer面试题63
牛客网测试地址:https://www.nowcoder.com/questionTerminal/ef068f602dde4d28aab2b210e859150a
[编程题]二叉搜索树的第k个结点
- 热度指数:40095 时间限制:1秒 空间限制:32768K
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 24 6 8 中,按结点数值大小顺序第三个结点的值为4。
Java code:
package go.jacob.day613;
import java.util.Stack;
/*
* 二叉树中序遍历的应用
* 二叉搜索树的中序遍历:从小到大输出节点
*/
public class Demo1 {
TreeNode KthNode(TreeNode pRoot, int k) {
if (pRoot == null || k <= 0)
return null;
int index = 0;
TreeNode kthNode = null;
TreeNode node = pRoot;
Stack<TreeNode> stack = new Stack<TreeNode>();
while (node != null || !stack.isEmpty()) {
if (node != null) {
stack.push(node);
node = node.left;
} else {
node = stack.pop();
index++;
//当遍历到第k个节点时,跳出循环
if (index == k) {
kthNode = node;
break;
}
node = node.right;
}
}
return kthNode;
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}