剑指No.54_二叉搜索树的第k大节点
- 题目:给定一棵二叉搜索树,请找出其中第k大的节点。
示例: 输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 4
- 需要记住这样一个结论:使用中序遍历对二叉搜索树进行遍历得到的数组是按照从小到大进行排序的。
public int kthLargestWay(TreeNode root, int k) {
if (root == null)
return 0;
List<TreeNode> list = new ArrayList<>();
LinkedList<TreeNode> stack = new LinkedList<>();
do {
while (root != null){
stack.push(root);
root = root.leftNode;
}
if (!stack.isEmpty()){
root = stack.pop();
list.add(root);
root = root.rightNode;
}
}while (!stack.isEmpty() || root != null);
return list.get(list.size() - k).val;
}