Java 树查询:深度优先搜索 (DFS) 和广度优先搜索 (BFS) 实现
Java 中树的查询可以使用深度优先搜索 (DFS) 或广度优先搜索 (BFS) 算法来实现。
- 深度优先搜索算法
深度优先搜索算法可以使用递归或栈来实现。递归实现时,先访问根节点,然后递归访问左子树和右子树。栈实现时,先将根节点入栈,然后循环弹出栈顶节点并访问,将其右子树和左子树分别入栈(注意先右后左)。
示例代码:
递归实现:
public void dfs(TreeNode root) {
if (root == null) {
return;
}
// 访问根节点
System.out.print(root.val + ' ');
// 递归访问左子树
dfs(root.left);
// 递归访问右子树
dfs(root.right);
}
栈实现:
public void dfs(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
// 访问节点
System.out.print(node.val + ' ');
// 将右子树和左子树入栈
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
}
- 广度优先搜索算法
广度优先搜索算法需要使用队列来实现。先将根节点入队,然后循环弹出队头节点并访问,将其左子树和右子树分别入队。
示例代码:
public void bfs(TreeNode root) {
if (root == null) {
return;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
// 访问节点
System.out.print(node.val + ' ');
// 将左子树和右子树入队
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
}
以上是 Java 中树的查询的基本方法,具体实现根据具体情况进行调整和优化。
原文地址: https://www.cveoy.top/t/topic/mskK 著作权归作者所有。请勿转载和采集!