java二叉树蛇形遍历怎么实现

   2025-02-13 7890
核心提示:蛇形遍历二叉树可以通过层次遍历来实现。具体步骤如下:首先,创建一个队列,并将二叉树的根节点入队。创建一个布尔变量leftToRi

蛇形遍历二叉树可以通过层次遍历来实现。具体步骤如下:

首先,创建一个队列,并将二叉树的根节点入队。创建一个布尔变量leftToRight,初始值为true。该变量表示当前行的遍历方向是从左到右还是从右到左。开始循环,直到队列为空。在循环中,首先获取当前队列的大小,以确定当前层的节点数量。创建一个列表levelList用来存储当前层的节点值。遍历当前层的节点数量次数,每次从队列中取出一个节点,并将其值添加到levelList中。如果leftToRighttrue,则将节点的左右子节点依次入队;如果leftToRightfalse,则将节点的右左子节点依次入队。将当前层的节点值列表levelList添加到结果列表中,然后将leftToRight取反,表示下一行的遍历方向。返回结果列表。

下面是Java代码实现:

import java.util.*;class TreeNode {    int val;    TreeNode left;    TreeNode right;    TreeNode(int val) {        this.val = val;    }}public class SnakeTraversal {    public List<List<Integer>> snakeTraversal(TreeNode root) {        List<List<Integer>> result = new ArrayList<>();        if (root == null) {            return result;        }        Queue<TreeNode> queue = new LinkedList<>();        queue.offer(root);        boolean leftToRight = true;        while (!queue.isEmpty()) {            int levelSize = queue.size();            List<Integer> levelList = new ArrayList<>();            for (int i = 0; i < levelSize; i++) {                TreeNode node = queue.poll();                levelList.add(node.val);                if (node.left != null) {                    queue.offer(node.left);                }                if (node.right != null) {                    queue.offer(node.right);                }            }            if (!leftToRight) {                Collections.reverse(levelList);            }            result.add(levelList);            leftToRight = !leftToRight;        }        return result;    }    public static void main(String[] args) {        TreeNode root = new TreeNode(1);        root.left = new TreeNode(2);        root.right = new TreeNode(3);        root.left.left = new TreeNode(4);        root.left.right = new TreeNode(5);        root.right.left = new TreeNode(6);        root.right.right = new TreeNode(7);        SnakeTraversal snakeTraversal = new SnakeTraversal();        List<List<Integer>> result = snakeTraversal.snakeTraversal(root);        for (List<Integer> level : result) {            System.out.println(level);        }    }}

输出结果:

[1][3, 2][4, 5, 6, 7]

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言