层序遍历二叉树的每一个节点

本文介绍了一种遍历二叉树的方法——层序遍历。通过使用队列实现节点的先进先出,确保同一层的节点按从左到右的顺序被访问。文章详细解释了算法的实现过程,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

层序遍历即将二叉树的每一层分别遍历,直到叶子节点全部被遍历完。我们可以借助队列先进先出的思想,将每一个节点放入队列中,抛出打印,再判断是否存在左右节点,并将左右节点也放入队列中,抛出打印,直到最有一个节点不存在左子数也不存在右子树,说明遍历完毕。
代码如下

void binartLevel(TreeNode root){
           Queue<TreeNode> queue = new LinkedList<>();
           if (root !=null){
               queue.offer(root);
           }
           while (!queue.isEmpty()){
               //拿到对头元素
               TreeNode cur = queue.poll();
               System.out.print(cur.value+" ");
               if (cur.left!=null){
                   queue.offer(cur.left);
               }
               if (cur.right!=null){
                   queue.offer(cur.right);
               }
           }
### 二叉树层序遍历算法实现 层序遍历是一种按照树的层级从上到下、从左到右逐层遍历节点的方式,通常使用队列来实现[^1]。以下是基于引用中的内容以及常见实现方法对层序遍历算法的详细说明。 #### 算法原理 层序遍历的核心思想是利用队列(FIFO)来存储每一层的节点,并依次处理每个节点的子节点。具体步骤如下: 1. 创建一个空队列,并将根节点入队。 2. 当队列非空时,执行以下操作: - 取出队列的第一个节点并访问该节点。 - 如果该节点有左子节点,则将左子节点入队。 - 如果该节点有右子节点,则将右子节点入队。 3. 重复上述过程直到队列为空。 #### 实现代码 以下是几种常见编程语言的层序遍历实现代码: ##### C语言实现 ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树节点结构 typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; } TreeNode; // 创建新节点 TreeNode* createNode(int val) { TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode)); node->val = val; node->left = NULL; node->right = NULL; return node; } // 层序遍历函数 void levelOrderTraversal(TreeNode* root) { if (root == NULL) return; // 使用数组模拟队列 TreeNode* queue[100]; int front = 0, rear = 0; queue[rear++] = root; // 根节点入队 while (front < rear) { TreeNode* currentNode = queue[front++]; printf("%d ", currentNode->val); if (currentNode->left != NULL) { queue[rear++] = currentNode->left; } if (currentNode->right != NULL) { queue[rear++] = currentNode->right; } } } ``` ##### C++实现 ```cpp #include <iostream> #include <queue> using namespace std; // 定义二叉树节点结构 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; // 层序遍历函数 vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> result; if (!root) return result; queue<TreeNode*> q; q.push(root); while (!q.empty()) { int size = q.size(); vector<int> level; for (int i = 0; i < size; ++i) { TreeNode* node = q.front(); q.pop(); level.push_back(node->val); if (node->left) q.push(node->left); if (node->right) q.push(node->right); } result.push_back(level); } return result; } ``` ##### Java实现 ```java import java.util.*; class TreeNode { int val; TreeNode left, right; TreeNode(int x) { val = x; } } public class BinaryTreeLevelOrderTraversal { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<>(); if (root == null) return result; Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { int size = queue.size(); List<Integer> level = new ArrayList<>(); for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); level.add(node.val); if (node.left != null) queue.add(node.left); if (node.right != null) queue.add(node.right); } result.add(level); } return result; } } ``` ##### Go语言实现 ```go package main import "fmt" type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func levelOrder(root *TreeNode) [][]int { var result [][]int if root == nil { return result } queue := []*TreeNode{root} for len(queue) > 0 { size := len(queue) level := []int{} for i := 0; i < size; i++ { node := queue[0] queue = queue[1:] level = append(level, node.Val) if node.Left != nil { queue = append(queue, node.Left) } if node.Right != nil { queue = append(queue, node.Right) } } result = append(result, level) } return result } ``` ### 总结 层序遍历是一种常见的二叉树遍历方式,适用于需要按层次顺序处理节点的场景。通过队列实现,可以确保每次处理当前层的所有节点后,再处理下一层节点[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值