【java实现】二叉树的广度优先遍历和深度优先遍历

1.初始化节点:

 static class TreeNode{
        int value;
        TreeNode left;
        TreeNode right;
        public TreeNode(int value){
            this.value=value;
        }
    }
    public static TreeNode initTree() {
        TreeNode node1 = 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);
        TreeNode node8 = new TreeNode(8);
        TreeNode node9 = new TreeNode(9);

        node1.left = node2;
        node1.right = node3;
        node2.left = node4;
        node2.right = node5;
        node3.left = node6;
        node3.right = node7;
        node5.right = node8;
        node7.left = node9;
        return node1;
    }

2.广度优先遍历:
在这里插入图片描述
对于广度优先遍历,通过队列这个数据结构可以实现,如下图所示,上面的一行是每次循环队列中的元素,下面的一行是每次遍历的元素。
在这里插入图片描述

public static void levelOrderTree(TreeNode root){
        ArrayDeque<TreeNode> queue=new ArrayDeque<>();
        queue.add(root);
        while (!queue.isEmpty()){
             TreeNode node=queue.remove();
            System.out.print(node.value+" ");
            //从左到右
             if(node.left!=null){
                 queue.add(node.left);
             }
             if(node.right!=null){
                 queue.add(node.right);
             }
        }
        System.out.println("\n");
    }

3.深度优先遍历:
上面一行是栈每次循环时保留的数据,每次读只能从最顶端pop()
在这里插入图片描述

  public static void depthOrderTree(TreeNode root){
        Stack<TreeNode> stack=new Stack<>();
                stack.push(root);
        while (!stack.isEmpty()){
           TreeNode node= stack.pop();
            System.out.println(node.value+" ");
             //从右到左
            if(node.right!=null){
                stack.push(node.right);
            }
            if(node.left!=null){
                stack.push(node.left);
            }
        }
        System.out.println();
    }
发布了146 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43689040/article/details/100518334