欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深度优先遍历和广度优先遍历(Java)

程序员文章站 2022-05-23 11:28:04
...

深度优先遍历:

将先访问到树中最深层次的节点;

public ArrayList<Node> depth(){//深度优先遍历
        if(root==null){
            throw new RuntimeException("空树!");
        }
        ArrayList<Node> list=new ArrayList<>();
        Stack<Node> stack=new Stack<>();
        stack.push(root);
        while (stack.isEmpty()==false){
            Node node=stack.pop();
            list.add(node);
            if(node.right!=null){
                stack.push(node.right);
            }
            if(node.left!=null){
                stack.push(node.left);
            }
        }return list;
    }

广度优先遍历:

逐层访问每层的节点;

public ArrayList<Node> level(){//广度优先遍历
        ArrayList<Node> list=new ArrayList<>();
        if(root==null){
            throw new RuntimeException("空树!");
        }
        Queue<Node> queue=new ArrayDeque<>();
        queue.add(root);
        while(queue.isEmpty()==false){
            Node node=queue.remove();
            list.add(node);
            if(node.left!=null){
                queue.add(node.left);
            }
            if(node.right!=null){
                queue.add(node.right);
            }
        }return list;
    }