函数都放进一个.cpp文件里发现太繁琐了,这里使用多文件声明使用,看起来更简洁。
树的形状
运行结果
CODE
main.cpp
#include "func.h"
#include "func.h"
// 1.2 对二叉树的先序、中序、后续遍历
// 递归思想
// 先序遍历: 先访问该节点,再往左走,最后往右走,在第一次到达节点时访问节点
// 中序遍历: 先往左走,再访问该节点,最后往右走,在第二次到达节点时访问节点
// 后续遍历: ...
void visit(BiNode *node){
printf("%c\t",node->data);
}
void PreOrder(BiTree tree){
if (tree != NULL){
visit(tree);
PreOrder(tree->left);
PreOrder(tree->right);
}
}
void InOrder(BiTree tree){
if (tree != NULL){
InOrder(tree->left);
visit(tree);
InOrder(tree->right);
}
}
void PostOrder(BiTree tree){
if (tree != NULL){
PostOrder(tree->left);
PostOrder(tree->right);
visit(tree);
}
}
int main() {
BiTree tree;
getDemo(tree);
PreOrder(tree);
printf("\n");
InOrder(tree);
printf("\n");
PostOrder(tree);
return 0;
}
build_demo.cpp:用于树的构建
#include "func.h"
void init(BiTree &tree){
tree = (BiNode*) malloc(sizeof(BiNode));
tree->left = NULL;
tree->right = NULL;
}
BiNode* create_node(Element elem){
BiNode *p_node = (BiNode*) malloc(sizeof(BiNode));
p_node->data = elem;
p_node->left=p_node->right=NULL;
return p_node;
}
BiTree getDemo(BiTree &tree){
// Demo:
// A
// B C
// D E NULL F
//
init(tree);
Element A,B,C,D,E,F;
A.value = 'A';
B.value = 'B';
C.value = 'C';
D.value = 'D';
E.value = 'E';
F.value = 'F';
BiNode *pb = create_node(B);
BiNode *pc = create_node(C);
BiNode *pd = create_node(D);
BiNode *pe = create_node(E);
BiNode *pf = create_node(F);
tree->data = A;
tree->left = pb;
tree->right = pc;
pb -> left = pd;
pb->right = pe;
pc->right = pf;
}
func.h
//
// Created by 64516 on 2023/1/25.
//
#ifndef ORDER_01_FUNC_H
#define ORDER_01_FUNC_H
#include <stdio.h>
#include <stdlib.h>
typedef struct Element{
char value;
};
typedef struct BiNode{
Element data;
BiNode *left,*right; // 可以将节点左右指针初始化为NULL吗?
}BiNode,*BiTree;
BiTree getDemo(BiTree &tree);
#endif //ORDER_01_FUNC_H
(ps: 之前写的顺序表和单链表等代码也都是用一个文件写的考研也不会考这些基本操作,考虑把这些基本操作在二轮做大题的时候都用另一个文件存起来)
多文件
头文件是扩展名为 .h 的文件,可以把用到的结构体和函数声明写里面,结构体和函数可以被多个源文件引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件, stdio.h 头文件,它是编译器自带的头文件。
.h文件里面些什么:
结构体共享:这里我把三种遍历函数放到了main.cpp中,三种遍历函数用到了结构体的声明,故结构体肯定需要全部共享。就算我把三个遍历函数都放在另一个原函数里面,结构体依旧需要共享。
函数共享:这取决于main函数用到了哪些函数,如果用到的函数被写在其它文件里面了,那肯定需要被共享了