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

二叉树的深度优先遍历和广度构建以及广度优先遍历

程序员文章站 2022-05-21 19:25:20
...

深度优先遍历

二叉树的深度优先遍历不管是先序中序还是后序都是很简单的,递归遍历即可,放上代码

public static void treeShow(Node tree){
    System.out.println(tree.value);
    if (tree.right != null){
        treeShow(tree.right);
    }
    if (tree.left != null){
        treeShow(tree.left);
    }
}

广度优先遍历

前言

二叉树不管是广度的构建以及广度优先遍历都需要用到队列的知识,建议不熟悉队列的先了解一下队列的相关知识。
链接:队列相关知识传送门

思路

给定一个数组,建立二叉树并进行广度优先遍历
构建:建立一个队列,建立一个结点,value是数组的第一个元素的值,把结点放入队列。开始循环,每一次循环从队列中拿出一个结点,然后
新建两个结点作为拿出的结点的左右孩子结点,再从数组中拿出两个值作为两个孩子结点的值。然后把左右孩子结点分别加入队列,照此循环,
最后遍历到数组末尾就可以构建完成二叉树
遍历:建立一个队列,把根节点放入队列,进入循环,循环条件为队列不空。从队列中拿出一个结点,访问结点的值,如果结点有左孩子,
左孩子入队;如果结点有右孩子,右孩子入队。

具体代码

import java.util.LinkedList;
import java.util.Queue;

public class GDTree {
    //广度优先遍历树
    public static void main(String[] args) {
        int[] num = new int[]{12,32,1,65,41,15,645,16,17,1,78,1,145,132};
        TreeNode tree = new TreeNode();
        tree.value = num[0];
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(tree);
        for (int i = 1; i < num.length; i+=2) {
            //拿出一个结点并在队列中删除
            TreeNode node = queue.poll();
            node.left = new TreeNode();
            node.left.value = num[i];
            queue.offer(node.left);
            if (i+1 < num.length) {
                node.right = new TreeNode();
                node.right.value = num[i+1];
                queue.offer(node.right);
            }
        }
        System.out.println(tree);
        showTree(tree);
    }
    private static void showTree(TreeNode tree){
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(tree);
        while (!queue.isEmpty()){
            tree = queue.poll();
            System.out.println(tree.value);
            if (tree.left!=null){
                queue.offer(tree.left);
            }
            if (tree.right!=null){
                queue.offer(tree.right);
            }
        }
    }
}
class TreeNode{
    Integer value;
    TreeNode left;
    TreeNode right;
    @Override
    public String toString() {
        return "TreeNode{" +
                "value=" + value +
                ", left=" + left +
                ", right=" + right +
                '}';
    }


}
相关标签: # 后端