📜  完美二叉树特定级别顺序遍历 |设置 2(1)

📅  最后修改于: 2023-12-03 15:39:07.488000             🧑  作者: Mango

完美二叉树特定级别顺序遍历 | 设置 2

简介

本篇文章将介绍如何在完美二叉树中实现特定级别的顺序遍历,并演示如何使用递归实现此功能。代码示例采用 Java 语言编写。

完美二叉树

完美二叉树是指一棵二叉树的每个非叶子节点都有两个子节点,并且所有叶子节点位于同一层级上。完美二叉树的图示如下所示:

      1
    /   \
   2     3
  / \   / \
 4   5 6   7
特定级别顺序遍历

特定级别顺序遍历是指按照节点所在的层级从上到下遍历完美二叉树。例如,对于上述完美二叉树,特定级别顺序遍历结果为: 1, 2, 3, 4, 5, 6, 7。

我们可以使用递归实现特定级别顺序遍历。具体而言,我们需要计算出完美二叉树的高度,然后从高度为 1 的层级开始递归遍历,直到遍历完所有层级。

下面是代码实现的具体方法:

public static void levelOrder(Node root, int level) {
    if (root == null) {
        return;
    }
    if (level == 1) {
        System.out.print(root.val + " ");
    } else if (level > 1) {
        levelOrder(root.left, level - 1);
        levelOrder(root.right, level - 1);
    }
}

在上述代码中,我们先检查根节点是否为空, 如果为空,则直接返回。接着,如果当前层级等于 1, 我们直接输出节点的值。如果当前层级大于 1,我们分别对左右子节点进行递归遍历,层级数目减 1。

为了实现特定级别顺序遍历,我们需要遍历完所有层级。我们可以在 main 函数中编写以下代码:

public static void main(String[] args) {
    Node root = new Node(1);
    root.left = new Node(2);
    root.right = new Node(3);
    root.left.left = new Node(4);
    root.left.right = new Node(5);
    root.right.left = new Node(6);
    root.right.right = new Node(7);
    int height = getTreeHeight(root);
    for (int level = 1; level <= height; level++) {
        levelOrder(root, level);
    }
}

在上述代码中,我们首先构造了一棵完美二叉树,并计算了它的高度。 然后,我们从高度为 1 的层级开始遍历,直到遍历完所有层级。

完整代码如下所示:

class Node {
    int val;
    Node left;
    Node right;

    public Node(int val) {
        this.val = val;
        this.left = null;
        this.right = null;
    }
}

public class BinaryTree {
    public static void levelOrder(Node root, int level) {
        if (root == null) {
            return;
        }
        if (level == 1) {
            System.out.print(root.val + " ");
        } else if (level > 1) {
            levelOrder(root.left, level - 1);
            levelOrder(root.right, level - 1);
        }
    }

    public static int getTreeHeight(Node root) {
        if (root == null) {
            return 0;
        } else {
            int leftHeight = getTreeHeight(root.left);
            int rightHeight = getTreeHeight(root.right);
            return Math.max(leftHeight, rightHeight) + 1;
        }
    }

    public static void main(String[] args) {
        Node root = new Node(1);
        root.left = new Node(2);
        root.right = new Node(3);
        root.left.left = new Node(4);
        root.left.right = new Node(5);
        root.right.left = new Node(6);
        root.right.right = new Node(7);
        int height = getTreeHeight(root);
        for (int level = 1; level <= height; level++) {
            levelOrder(root, level);
        }
    }
}
结语

本文介绍了如何在完美二叉树中实现特定级别的顺序遍历,并演示了如何使用递归实现此功能。我们需要计算出完美二叉树的高度,然后从高度为 1 的层级开始递归遍历,直到遍历完所有层级。通过本文的介绍,我们相信读者对完美二叉树的遍历会有更加深入的了解。