编写程序,实现求采用链式存储结构存储的二叉树的树高
时间: 2023-09-22 17:06:24 浏览: 94
### 回答1:
假设采用以下的二叉树的链式存储结构:
```python
class BinaryTreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class BinaryTree:
def __init__(self):
self.root = None
```
其中,每个`BinaryTreeNode`对象代表二叉树上的一个节点,`left`和`right`分别表示该节点的左子节点和右子节点。
我们可以使用递归的方法来求二叉树的树高,具体步骤如下:
1. 如果二叉树为空,则树高为0;
2. 否则,分别递归计算左子树和右子树的树高,并取其较大值,再加上1,即为整个二叉树的树高。
以下是求二叉树树高的程序实现:
```python
def get_height(root):
if root is None:
return 0
left_height = get_height(root.left)
right_height = get_height(root.right)
return max(left_height, right_height) + 1
```
其中,`root`为二叉树的根节点。我们可以通过如下代码调用该函数来求二叉树的树高:
```python
tree = BinaryTree()
# 构造二叉树,省略...
height = get_height(tree.root)
print(height)
```
### 回答2:
要实现求采用链式存储结构存储的二叉树的树高,可以采用递归的方式。
首先需要定义二叉树的节点结构:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
```
其中,val表示节点的值,left和right分别表示左子节点和右子节点。
接下来,可以编写一个递归函数来求二叉树的树高:
```python
def tree_height(root):
if root is None:
return 0
else:
left_height = tree_height(root.left)
right_height = tree_height(root.right)
return max(left_height, right_height) + 1
```
在上述递归函数中,如果节点为空,则返回0。否则,分别递归计算左子树的树高和右子树的树高,然后将左右子树中较大的树高加1返回。
最后,可以创建一个二叉树,并调用上述函数来计算树高:
```python
# 创建二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
# 计算树高
height = tree_height(root)
print("二叉树的树高为", height)
```
在上述代码中,我们创建了一个二叉树,然后调用tree_height函数来计算树高,并将结果打印出来。
通过以上步骤,就可以编写一个程序,实现求采用链式存储结构存储的二叉树的树高。
### 回答3:
实现求链式存储结构存储的二叉树的树高,可以采用递归的方式进行。具体步骤如下:
1. 首先定义一个二叉树的结构,包含一个数据域和左右子树指针域。
2. 编写一个递归函数,用于求二叉树的树高。
3. 在递归函数中,首先判断当前节点是否为空,若为空,则返回0。
4. 若当前节点不为空,则分别求出左子树和右子树的树高,取二者中较大的一个,并加上1,即为当前节点所在子树的树高。
5. 最后返回所得的树高。
以下是一个示例的代码实现:
```
// 定义二叉树结构
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 递归函数,求二叉树的树高
int getTreeHeight(TreeNode* root) {
if (root == NULL) {
return 0;
} else {
int leftHeight = getTreeHeight(root->left);
int rightHeight = getTreeHeight(root->right);
return (leftHeight > rightHeight) ? (leftHeight + 1) : (rightHeight + 1);
}
}
// 示例代码
int main() {
// 构建一棵二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->data = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->data = 3;
root->right->left = NULL;
root->right->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->right->data = 4;
root->right->right->left = NULL;
root->right->right->right = NULL;
// 求二叉树的树高
int height = getTreeHeight(root);
printf("二叉树的树高为:%d\n", height);
return 0;
}
```
运行以上代码,输出结果为:二叉树的树高为:3
阅读全文