Algorithm 如何计算树的高度

Algorithm 如何计算树的高度,algorithm,data-structures,tree,Algorithm,Data Structures,Tree,我正在努力学习DSA,但遇到了一个问题 如何计算树的高度。我指的是普通树,而不是像BT或BST这样的树的任何具体实现 我曾经尝试过谷歌,但似乎每个人都在谈论二叉树,而普通树却一无所获 任何人都可以帮助我重定向到某个页面或文章来计算树的高度。 < P>在“正常树”的情况下,你可以递归地计算树的高度与二叉树的相似方式,但是这里你必须考虑节点上的所有孩子而不是仅仅两个。< /P> < P>让我们说树中的一个典型节点表示为Java类 class Node{ Entry entry; Ar

我正在努力学习DSA,但遇到了一个问题

如何计算树的高度。我指的是普通树,而不是像BT或BST这样的树的任何具体实现

我曾经尝试过谷歌,但似乎每个人都在谈论二叉树,而普通树却一无所获


任何人都可以帮助我重定向到某个页面或文章来计算树的高度。

< P>在“正常树”的情况下,你可以递归地计算树的高度与二叉树的相似方式,但是这里你必须考虑节点上的所有孩子而不是仅仅两个。< /P> < P>让我们说树中的一个典型节点表示为Java类

class Node{
    Entry entry;
    ArrayList<Node> children;
    Node(Entry entry, ArrayList<Node> children){
        this.entry = entry;
        this.children = children;
    }   
    ArrayList<Node> getChildren(){
        return children;
    }   
}  

然后您只需要调用这个函数,将树的根作为参数传递。因为它只遍历所有节点一次,所以运行时间是O(n)。

要找到树的高度,BFS迭代可以正常工作

编辑形式维基百科:

Breadth-First-Search(Graph, root):

    create empty set S
    create empty queues Q1, Q2    

    root.parent = NIL

    height = -1

    Q1.enqueue(root)                      
    while Q1 is not empty:

        height = height + 1
        switch Q1 and Q2

        while Q2 is not empty:
            for each node n that is adjacent to current:
                if n is not in S:
                    add n to S
                    n.parent = current
                    Q1.enqueue(n)
您可以看到,添加另一个队列可以让我知道树的级别。 它对每个级别以及该级别中的每个模式进行迭代

这是一种推理方式(与递归相反)。所以你也不必担心


运行时是O(| V |+| E |)。

您的问题缺少很多上下文,可用的工具和数据是什么?否则答案可能是:拿一个梯子和一根卷尺。请参考此链接,希望在那里找到答案,二进制或n进制对于查找高度没有多大区别。下面是一些C++ish伪代码,让您开始:
int Tree::height(){返回子对象?1+max(Children::height()):1;}
,你说的普通树是什么意思?这看起来像是一个树深度的发现solution@elad.chen它是。那不是你一直在找的吗?
Breadth-First-Search(Graph, root):

    create empty set S
    create empty queues Q1, Q2    

    root.parent = NIL

    height = -1

    Q1.enqueue(root)                      
    while Q1 is not empty:

        height = height + 1
        switch Q1 and Q2

        while Q2 is not empty:
            for each node n that is adjacent to current:
                if n is not in S:
                    add n to S
                    n.parent = current
                    Q1.enqueue(n)