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