二叉树的层序遍历及判断一个二叉树是否为完全二叉树

层序遍历

  • 层序遍历
    • 思路:
    • 代码实现:
  • 判断一个二叉树是否为完全二叉树

层序遍历

我们知道二叉树的遍历分为深度优先遍历和广度优先遍历
深度优先遍历分为先序遍历、中序遍历、后序遍历
广度优先遍历 为 层序遍历

顾名思义,层序遍历为一层一层遍历,从上至下,从左至右,如下图:层序遍历结果为:a b c d e f g
二叉树的层序遍历及判断一个二叉树是否为完全二叉树_第1张图片

思路:

如何进行二叉树的层序遍历呢?我们首先拿到根节点,然后访问左结点,访问右节点…
我们可以将结点放在队列中,然后分别把左节点右节点放进队列,最后依次输出可得到层序遍历。

代码实现:

public class TreeNode {
    public int val;
    public TreeNode left;
    public TreeNode right;

    public TreeNode(int val) {
        this.val = val;
    }

    @Override
    public String toString() {
        return String.format("TreeNode{%c}", val);
    }
}
import java.util.LinkedList;
import java.util.Queue;
  
public class levelTraversal {
    public void level(TreeNode root) {
        if (root == null) {
            return;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            TreeNode node = queue.remove();
            System.out.println((char) node.val);
            if (node.left != null) {
                queue.add(node.left);
            }
            if (node.right != null) {
                queue.add(node.right);
            }
        }
    }
}
/**
 *
 */
public class Test {
    public static void main(String[] args) {
        TreeNode a = new TreeNode('a');
        TreeNode b = new TreeNode('b');
        TreeNode c = new TreeNode('c');
        TreeNode d = new TreeNode('d');
        TreeNode e = new TreeNode('e');
        TreeNode f = new TreeNode('f');
        TreeNode g = new TreeNode('g');
        TreeNode h = new TreeNode('h');

        a.left = b; a.right = c;
        b.left = d; b.right = e;
        c.left = f; c.right = g;
        e.right = h;

        levelTraversal levelTraversal=new levelTraversal();
        levelTraversal.level(a);
    }
}

结果:
二叉树的层序遍历及判断一个二叉树是否为完全二叉树_第2张图片

判断一个二叉树是否为完全二叉树

完全二叉树是由满二叉树而引出的。对于深度为k的,有n个结点的二叉树,当且仅当其没一个节点都与深度为k的满二叉树中编号从1至n的结点对应则是完全二叉树。
满二叉树是一种特殊的完全二叉树
二叉树的层序遍历及判断一个二叉树是否为完全二叉树_第3张图片
我们可以将二叉树层序遍历出来(包括空节点)
完全二叉树结果:abcdefg#####
非完全二叉树结果:abcd##ef###
当队列中遇到null时,如果后面都是null,那么就是完全二叉树,否则不是完全二叉树;

题目链接:
二叉树的完全性检验
二叉树的层序遍历及判断一个二叉树是否为完全二叉树_第4张图片

class Solution {
    public boolean isCompleteTree(TreeNode root) {
        if (root == null) {
            return true;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        boolean flag = false;
        while (!queue.isEmpty()) {
            TreeNode node = queue.remove();
            if (node == null) {
                flag = true;
                continue;
            }
            if (flag) {
                return false;
            }
            queue.add(node.left);
            queue.add(node.right);

        }
        return true;
    }
}

你可能感兴趣的:(Data,Structure,二叉树,队列,数据结构,层序遍历)