二叉树 三种遍历方式
- 二叉树总结:
因为是采用的链表
所有有几点总结
相似之处【上结论】
这是二叉树节点的定义
1.*BTree 是 树节点和普通节点有别 记着 是指针类型 (可以理解为树这个多功能链表)
2.BiNode 是每一个节点
typedef struct BiNode {
int v;
struct BiNode *left,*right;
} BiNode,*BTree;
这是简单的二叉树根的定义
1.注意参数
2.节点的定义
t = (BTree)malloc(sizeof(BiNode));
(BTree): 树(BiNode) 节点
int initeTree(BTree &t) {
t = new BiNode;
t = (BTree)malloc(sizeof(BiNode));
t->left=NULL;
t->right=NULL;
t->v = 1;
return 1;
}
前序遍历
1.注意参数
2.注意递归顺序
void preOrder (BTree &t) {
if(t) {
printf("%d ",t->v);
preOrder (t->left);
preOrder(t->right);
}
}
#include<bits/stdc++.h>
#define maxSize 100
typedef struct BiNode {
int v;
struct BiNode *left,*right;
} BiNode,*BTree;
int initeTree(BTree &t) {
t = (BTree)malloc(sizeof(BiNode));
t->left=NULL;
t->right=NULL;
t->v = 1;
return 1;
}
//前序遍历
void preOrder (BTree &t) {
if(t) {
printf("%d ",t->v);
preOrder (t->left);
preOrder(t->right);
}
}
//中序遍历
void midOrder (BTree &t) {
if(t) {
midOrder (t->left);
printf("%d ",t->v);
midOrder(t->right);
}
}
//中序遍历
void rearOrder (BTree &t) {
if(t) {
rearOrder (t->left);
rearOrder(t->right);
printf("%d ",t->v);
}
}
int main() {
BTree b;
int res = initeTree(b);
printf("构建结果:%d\n",res);
//自己先手动构造一颗二叉树
BTree b2 = (BTree)malloc(sizeof(BiNode));
b2->v = 2;
BTree b3 = (BTree)malloc(sizeof(BiNode));
b3->v = 3;
BTree b4 = (BTree)malloc(sizeof(BiNode));
b4->v = 4;
BTree b5 = (BTree)malloc(sizeof(BiNode));
b5->v = 5;
BTree b6 = (BTree)malloc(sizeof(BiNode));
b6->v = 6;
BTree b7 = (BTree)malloc(sizeof(BiNode));
b7->v = 7;
b->left=b2;
b->right=b3;
b2->left=b4;
b2->right=b5;
b3->left=b6;
b3->right=NULL;
b4->left=NULL;
b4->right=b7;
b7->left=NULL;
b7->right=NULL;
b5->left=NULL;
b5->right=NULL;
b6->left=NULL;
b6->right=NULL;
b3->left=b6;
b3->right=NULL;
// printf("[%d]\n",b->right->left->v);
preOrder(b);
printf("\n");
midOrder(b);
printf("\n");
rearOrder(b);
}