用jave写一个二叉树的深度遍历和广度遍历的算法并解释
下面是用Java写的二叉树的深度遍历和广度遍历的算法示例:
import java.util.LinkedList;
import java.util.Queue;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
}
public class BinaryTreeTraversal {
// 深度优先遍历(前序遍历)
public static void depthFirstTraversal(TreeNode root) {
if (root == null) {
return;
}
System.out.print(root.val + " ");
depthFirstTraversal(root.left);
depthFirstTraversal(root.right);
}
// 广度优先遍历
public static void breadthFirstTraversal(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);
}
}
}
public static void main(String[] args) {
// 构建一个示例二叉树
TreeNode root = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
TreeNode node6 = new TreeNode(6);
TreeNode node7 = new TreeNode(7);
root.left = node2;
root.right = node3;
node2.left = node4;
node2.right = node5;
node3.left = node6;
node3.right = node7;
// 深度优先遍历
System.out.print("深度优先遍历:");
depthFirstTraversal(root);
System.out.println();
// 广度优先遍历
System.out.print("广度优先遍历:");
breadthFirstTraversal(root);
System.out.println();
}
}
解释:
-
深度优先遍历(前序遍历):从根节点开始,先访问根节点,然后递归地遍历左子树,再递归地遍历右子树。在上述示例中,深度优先遍历的结果为:1 2 4 5 3 6 7。
-
广度优先遍历:从根节点开始,一层一层地遍历二叉树。使用队列来存储每一层的节点,先将根节点入队,然后依次出队并访问,同时将其左右子节点入队,直到队列为空。在上述示例中,广度优先遍历的结果为:1 2 3 4 5 6 7
原文地址: https://www.cveoy.top/t/topic/iMB8 著作权归作者所有。请勿转载和采集!