假设二叉树T采用如下定义的存储结构: (本题10分) typedef struct Node { DataType data; struct Node *lchild,*rchild; } *BiTree; 其中,结点的lchild域和rchild域已分别填有指向其左、右孩子结点的指针, 编写一个递归算法,计算一棵二叉树的深度。
时间: 2024-03-21 16:37:58 浏览: 77
好的,这是一道关于二叉树深度的问题。以下是递归算法的实现:
```
int getDepth(BiTree T) {
if (T == NULL) {
return 0; // 空树深度为0
} else {
int leftDepth = getDepth(T->lchild); // 左子树深度
int rightDepth = getDepth(T->rchild); // 右子树深度
return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1; // 取左右子树深度的最大值加1
}
}
```
这里使用了递归的思想,首先判断树是否为空,如果为空,则深度为0;否则递归计算左子树和右子树的深度,取其最大值加1即为整棵树的深度。
相关问题
已知二叉树结点的定义如下: typedef struct Node{ DataType data; struct Node *LChild; struct Node *Rchild; }BiTNode, *BiTree; 若用二叉链表作为二叉树的存储表示,请设计代码求二叉树中度为 1 的结点个数。
好的,我会根据您的要求,使用 ChitGPT 来回答您的问题。
对于这个问题,我们可以遍历整个二叉树,统计度为 1 的节点个数。具体的实现可以使用递归来实现,遍历当前节点的左右子树,统计当前节点度为 1 的子树的数量,并加上当前节点的度数,最后返回结果即可。
以下是具体的代码实现:
```
int countSingleDegreeNodes(BiTree root) {
if (root == NULL) {
return 0;
}
int count = 0;
if (root->LChild == NULL && root->Rchild != NULL) {
count++;
} else if (root->LChild != NULL && root->Rchild == NULL) {
count++;
}
count += countSingleDegreeNodes(root->LChild);
count += countSingleDegreeNodes(root->Rchild);
return count;
}
```
在这个代码中,我们首先检查当前节点的度数,如果是 1 则增加计数器,然后递归遍历左右子树,并将它们的结果相加作为最终的结果返回。
希望这个解答对您有帮助,如果您还有其他问题,可以继续问我。
struct TNode { Datatype data; TNode* rchild; TNode* lchild; };
上面的代码定义了一个名为 `TNode` 的结构体类型,包含三个成员变量:`data`、`rchild` 和 `lchild`。
其中,`data` 的数据类型是 `Datatype`,这个类型应该是通过 `typedef` 定义过的,可以理解为一个别名。`rchild` 和 `lchild` 的数据类型都是 `TNode*`,也就是指向 `TNode` 结构体类型的指针。
这个结构体类型可以用来定义一棵二叉树的节点,其中 `data` 存储节点的数据,`rchild` 存储右子树的指针,`lchild` 存储左子树的指针。例如,定义一个包含整数数据的二叉树节点可以写成:
```
typedef int Datatype;
struct TNode {
Datatype data;
TNode* rchild;
TNode* lchild;
};
```
然后可以创建该结构体类型的节点并访问其成员,例如:
```
TNode* node = new TNode;
node->data = 10;
node->rchild = NULL;
node->lchild = NULL;
```
阅读全文