以孩子兄弟链表为存储结构,请设计递归算法求树的深度。
int height(CSTree bt){
int hc,hs;
if(bt==NULL) return 0;
else {
hc=height(bt->firstchild);
hs=height(bt->nextsibling);
if(hc+1>hs) return(hc+1);
else return hs;
}
}
孩子兄弟链表:
-
节点结构:每个节点包含两个指针,通常称为
firstchild
和nextsibling
。firstchild
指向节点的第一个孩子节点,nextsibling
指向节点的下一个兄弟节点。节点还可能包含其他属性,例如节点的值或标签。 -
树的表示:通过指针的连接,可以将多个节点组织成树形结构。树的根节点由链表的头部表示,每个节点的
firstchild
指针指向它的孩子节点,nextsibling
指针指向它的兄弟节点。
```c
int height(CSTree bt){
```
函数名为 `height`,接受一个孩子兄弟表示法的树 `bt` 作为参数,返回该树的高度。
```c
int hc, hs;
```
定义两个变量 `hc` 和 `hs`,用来存储当前节点的孩子树和兄弟树的高度。
```c
if(bt == NULL)
return 0;
```
如果当前节点为空(即树为空),返回高度为 0。
```c
else {
hc = height(bt->firstchild);
hs = height(bt->nextsibling);
```
否则,分别计算当前节点的孩子树和兄弟树的高度,递归调用 `height` 函数。
```c
if(hc + 1 > hs)
return (hc + 1);
else
return hs;
```
根据孩子树和兄弟树的高度,选择更大的值,并加上当前节点本身的高度(即加 1)作为当前节点的高度,然后返回这个高度值。