深度优先搜索
Posted 浮云神码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度优先搜索相关的知识,希望对你有一定的参考价值。
深度优先搜索和广度优先搜索一样,都是对图进行搜索的算法,目的也都是从起点开始搜索直到指定的终点。深度优先搜索会沿着一条路径不断往下搜索直到不能再继续为止,然后再折返,开始搜索下一条候补路径。
import java.util.Stack;
/**
* https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst
* 230. 二叉搜索树中第K小的元素
* 难度 中等
* 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第k个最小元素(从 1 开始计数)。
*
* 示例 1:
* 输入:root = [3,1,4,null,2], k = 1
* 输出:1
*
* 示例 2:
* 输入:root = [5,3,6,2,4,null,null,1], k = 3
* 输出:
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst
*/
public class KthSmallestElementInBst {
public int kthSmallest(TreeNode root, int k) {
Stack<TreeNode> stack = new Stack<>();
while (true) {
// 此循环将root的左子节点按从大到小存入栈中
// 当pop时, 就会按照从小到大的顺序了
while (root != null) {
stack.push(root);
root = root.left;
}
// 这里k必须小于树节点的数量, 不然会报错
// 可以增加stack.isEmpty()的判断, 不过在本题中k一定小于节点数量
root = stack.pop();
if (--k == 0) {
return root.val;
}
// 处理完当前节点, 再处理右子节点
root = root.right;
}
}
}
以上是关于深度优先搜索的主要内容,如果未能解决你的问题,请参考以下文章