首页 > 解决方案 > 从二叉搜索树打印级别和节点

问题描述

我需要对二叉搜索树进行中序遍历,并且需要打印所有节点及其所在的级别,但我想不出一种方法来做到这一点。

例如:

如果我有这个 bst,输出将是:

4 #1
5 #0
9 #1
7 #2
10 #2
18 #3

到目前为止,这是我得到的:

这是我正在使用的结构:

struct tree {
    int number;
    tree *izq;
    tree *der;
};

typedef struct tree *bst;

这是我要实现的功能:

void printTree(bst node) {
    if (node==NULL) {
        return;
    }
    else {
        if (node->left != NULL) {
            printTree(node->left);
        }
        printf("%d", node->number);
        if (node->right !=NULL) {
            printTree(node->right);
        }
    }
}

有没有人有任何想法?谢谢 :)

标签: cbinary-search-tree

解决方案


我用 Java 实现了这个,但我认为你可以很容易地将它转换为 C:

private static void printWithLevels(TreeNode node) {
    printWithLevels(node, 0);
}

private static void printWithLevels(TreeNode node, int level) {
    if (node == null) return;

    System.out.println(node.value + "(" + level + ")");

    printWithLevels(node.left, level + 1);
    printWithLevels(node.right, level + 1);
}

为了使我的解决方案完整,这是我对 TreeNode 的简单/快速实现:

private static class TreeNode {
    int value;
    TreeNode left;
    TreeNode right;

    TreeNode(int value, TreeNode left, TreeNode right) {
        this.value = value;
        this.left = left;
        this.right = right;
    }
}

推荐阅读