1.二叉树的链式存储结构表示 2.根据二叉树的括号表示法创建二叉树的链式存储结构; 3.访问二叉树的结点; 4.横向输出二叉树; 5.求二叉树的高度; 6.统计二叉树中的节点个数;
时间: 2023-11-14 15:13:57 浏览: 123
JAVA 实现二叉树(链式存储结构)
1. 二叉树的链式存储结构表示:
二叉树的链式存储结构通常使用指针来表示,每个节点包括数据域和两个指针,分别指向左子树和右子树,如果对应的子树为空,则指针为NULL。如下所示:
```
typedef struct TreeNode{
int data;
struct TreeNode* left;
struct TreeNode* right;
}TreeNode;
```
2. 根据二叉树的括号表示法创建二叉树的链式存储结构:
二叉树的括号表示法是一种简单的表示二叉树的方法,其中左括号表示进入一个新节点,右括号表示回到该节点的父节点。例如,二叉树的括号表示法为 (1(2()(4))(3)),表示根节点为1,左子树为2,右子树为3,2的右子树为4。根据这种表示法,可以使用递归的方式创建二叉树的链式存储结构:
```
TreeNode* createTree(char* str, int* index){
if(str[*index] == '\0') return NULL;
if(str[*index] == '('){
(*index)++;
if(str[*index] == ')'){
(*index)++;
return NULL;
}
int num = 0;
while(str[*index] >= '0' && str[*index] <= '9'){
num = num * 10 + str[*index] - '0';
(*index)++;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = num;
root->left = createTree(str, index);
root->right = createTree(str, index);
(*index)++;
return root;
}
return NULL;
}
```
3. 访问二叉树的结点:
访问二叉树的结点通常使用中序遍历、前序遍历、后序遍历等方式。以中序遍历为例,可以使用递归的方式遍历二叉树:
```
void inorderTraversal(TreeNode* root){
if(root == NULL) return;
inorderTraversal(root->left);
printf("%d ", root->data);
inorderTraversal(root->right);
}
```
4. 横向输出二叉树:
横向输出二叉树可以使用递归的方式,每一层的节点都左对齐,并且节点之间用空格隔开。例如,对于二叉树的括号表示法为 (1(2()(4))(3)),横向输出结果为:
```
1
2 3
4
```
具体实现如下:
```
void printTree(TreeNode* root, int depth){
if(root == NULL) return;
printTree(root->right, depth + 1);
for(int i = 0; i < depth; i++){
printf(" ");
}
printf("%d\n", root->data);
printTree(root->left, depth + 1);
}
```
5. 求二叉树的高度:
求二叉树的高度可以使用递归的方式,二叉树的高度等于左右子树高度的最大值加一。具体实现如下:
```
int getHeight(TreeNode* root){
if(root == NULL) return 0;
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
return (leftHeight > rightHeight ? leftHeight : rightHeight) + 1;
}
```
6. 统计二叉树中的节点个数:
统计二叉树中的节点个数也可以使用递归的方式,二叉树节点个数等于左右子树节点个数之和再加一。具体实现如下:
```
int countNodes(TreeNode* root){
if(root == NULL) return 0;
int leftCount = countNodes(root->left);
int rightCount = countNodes(root->right);
return leftCount + rightCount + 1;
}
```
阅读全文