Initial commit
This commit is contained in:
commit
6be12020b2
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
# 项目排除路径
|
||||
/cmake-build-debug/
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2016-2023 筱锋xiao_lfeng
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
8
README.md
Normal file
8
README.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
# DataStructure_TreeLink_C
|
||||
|
||||
高等院校计算机必修课(基于C语言数据结构) —— 链表(二叉树)
|
||||
|
||||
作者:[筱锋xiao_lfeng](https://www.x-lf.com/)
|
||||
|
||||
注意:代码不更新,接收用户PR。
|
||||
若使用请遵循MIT开源协议
|
BIN
TreeLink.exe
Normal file
BIN
TreeLink.exe
Normal file
Binary file not shown.
139
main.cpp
Normal file
139
main.cpp
Normal file
|
@ -0,0 +1,139 @@
|
|||
/*
|
||||
* 代码说明
|
||||
* 代码由 筱锋xiao_lfeng 编写
|
||||
* 其开发者由此互联网ICP备案作者编写:粤ICP备2022014822号
|
||||
*/
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#define MaxSize 100
|
||||
|
||||
typedef char ElemType;
|
||||
typedef struct Node {
|
||||
ElemType data;
|
||||
struct Node* lchild, * rchild;
|
||||
} TreeNode;
|
||||
|
||||
void CreateBTree(TreeNode *& bt,const char* str) {
|
||||
TreeNode * St[MaxSize], * p = nullptr;
|
||||
int j = 0, k, top = -1;
|
||||
char ch;
|
||||
bt = nullptr;
|
||||
while ((ch = str[j]) != '\0') {
|
||||
switch (ch) {
|
||||
case '(':
|
||||
top++;
|
||||
St[top] = p;
|
||||
k = 1;
|
||||
break;
|
||||
case ')':
|
||||
top--;
|
||||
break;
|
||||
case ',':
|
||||
k = 2;
|
||||
break;
|
||||
default:
|
||||
p = (TreeNode*)malloc(sizeof(TreeNode));
|
||||
p->data = ch;
|
||||
p->lchild = p->rchild = nullptr;
|
||||
if (bt == nullptr) bt = p;
|
||||
else {
|
||||
switch (k) {
|
||||
case 1:
|
||||
St[top]->lchild = p;
|
||||
break;
|
||||
case 2:
|
||||
St[top]->rchild = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
int BTHeight(TreeNode* bt) {
|
||||
if (bt == nullptr)
|
||||
return 0;
|
||||
int h1 = BTHeight(bt->lchild);
|
||||
int h2 = BTHeight(bt->rchild);
|
||||
return (h1 > h2) ? (h1 + 1) : (h2 + 1);
|
||||
}
|
||||
|
||||
int NodeCount(TreeNode* bt) {
|
||||
if (bt == nullptr)
|
||||
return 0;
|
||||
int n1 = NodeCount(bt->lchild);
|
||||
int n2 = NodeCount(bt->rchild);
|
||||
return 1 + n1 + n2;
|
||||
}
|
||||
|
||||
int LeafCount(TreeNode* bt) {
|
||||
if (bt == nullptr)
|
||||
return 0;
|
||||
if (bt->lchild == nullptr && bt->rchild == nullptr)
|
||||
return 1;
|
||||
int a = LeafCount(bt->lchild);
|
||||
int b = LeafCount(bt->rchild);
|
||||
return a + b;
|
||||
}
|
||||
|
||||
// 退出前销毁二叉树
|
||||
void DestroyBTree(TreeNode*& bt) {
|
||||
if (bt != nullptr) {
|
||||
DestroyBTree(bt->lchild);
|
||||
DestroyBTree(bt->rchild);
|
||||
free(bt);
|
||||
bt = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PreOrder(TreeNode* bt) {
|
||||
if (bt != nullptr) {
|
||||
printf("%c", bt->data);
|
||||
PreOrder(bt->lchild);
|
||||
PreOrder(bt->rchild);
|
||||
}
|
||||
}
|
||||
|
||||
void InOrder(TreeNode* bt) {
|
||||
if (bt != nullptr) {
|
||||
InOrder(bt->lchild);
|
||||
printf("%c", bt->data);
|
||||
InOrder(bt->rchild);
|
||||
}
|
||||
}
|
||||
|
||||
void PostOrder(TreeNode* bt) {
|
||||
if (bt != nullptr) {
|
||||
PostOrder(bt->lchild);
|
||||
PostOrder(bt->rchild);
|
||||
printf("%c", bt->data);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
TreeNode* bt;
|
||||
char str[100];
|
||||
printf("请输入建立二叉链表的序列:\n");
|
||||
fgets(str, sizeof(str), stdin);
|
||||
str[strcspn(str, "\n")] = '\0'; // 去除fgets读取的换行符
|
||||
CreateBTree(bt, str);
|
||||
printf("bt的先序遍历:");
|
||||
PreOrder(bt);
|
||||
printf("\n");
|
||||
printf("bt的中序遍历:");
|
||||
InOrder(bt);
|
||||
printf("\n");
|
||||
printf("bt的后序遍历:");
|
||||
PostOrder(bt);
|
||||
printf("\n");
|
||||
printf("bt的高度:%d\n", BTHeight(bt));
|
||||
printf("bt的结点数:%d\n", NodeCount(bt));
|
||||
printf("bt的叶子结点数:%d\n", LeafCount(bt));
|
||||
DestroyBTree(bt);
|
||||
system("pause");
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user