1.创建一棵二叉树
1.1 创建二叉树的主要步骤在于对左右节点的创建,我们首先静态创建一个二叉树
- 1.首先创建一个结构体用来装树的节点,其次定义一个函数用来生成树;
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int n_value;
struct node* p_left;
struct node* p_right;
}BinaryTree;
BinaryTree* CreateTree()
{
BinaryTree* p_tree = NULL;
p_tree = (BinaryTree*)malloc(sizeof(BinaryTree));
p_tree->n_value = 1;
p_tree->p_left = (BinaryTree*)malloc(sizeof(BinaryTree));
p_tree->p_left->n_value = 2;
p_tree->p_left->p_left = (BinaryTree*)malloc(sizeof(BinaryTree));
p_tree->p_left->p_left->n_value = 4;
p_tree->p_left->p_left->p_left = NULL;
p_tree->p_left->p_left->p_right = NULL;
p_tree->p_left->p_right = (BinaryTree*)malloc(sizeof(BinaryTree));
p_tree->p_left->p_right->n_value = 5;
p_tree->p_left->p_right->p_left = NULL;
p_tree->p_left->p_right->p_right = NULL;
p_tree->p_right = (BinaryTree*)malloc(sizeof(BinaryTree));
p_tree->p_right->n_value = 3;
p_tree->p_right->p_left = (BinaryTree*)malloc(sizeof(BinaryTree));
p_tree->p_right->p_left->n_value = 6;
p_tree->p_right->p_left->p_left = NULL;
p_tree->p_right->p_left->p_right = NULL;
p_tree->p_right->p_right = NULL;
return p_tree;
}
int main()
{
BinaryTree* p_tree = NULL;
p_tree = CreateTree();
return 0;
}
1.2 遍历一颗二叉树
- 1.可以通过深度来遍历;深度遍历二叉树的方法有三种:前序遍历、中序遍历、后序遍历;
- 2.可以通过广度来遍历;广度遍历二叉树;
- 3.首先使用递归方式来进行前序遍历;
void PreorderTraversal(BinaryTree *p_tree)
{
if(p_tree == NULL)return;
printf("%d ", p_tree->n_value);
PreorderTraversal(p_tree->p_left);
PreorderTraversal(p_tree->p_right);
}
- 4.使用前序遍历得到的结果是: 1 2 4 5 3 6;
- 5.使用递归方式来完成中序遍历;
void InorderTraversal(BinaryTree *p_tree)
{
if(p_tree == NULL)return;
InorderTraversal(p_tree->p_left);
printf("%d ", p_tree->n_value);
InorderTraversal(p_tree->p_right);
}
- 6.使用中序遍历得到的结果是: 4 2 5 1 6 3;
- 7.使用递归方式完成后序遍历;
void LastorderTraversal(BinaryTree *p_tree)
{
if(p_tree == NULL)return;
LastorderTraversal(p_tree->p_left);
LastorderTraversal(p_tree->p_right);
printf("%d ", p_tree->n_value);
}
- 8.使用后序遍历得到的结果是: 4 5 2 6 3 1;
1.3 动态创建一个二叉树
- 1.也需要用到递归的思想,我们要先为树节点申请空间来装树,再对左右进行处理;
void DynamicCreateTree(BinaryTree** pp_tree)
{
int num;
scanf("%d ", &num);
if(num == 0)return;
*pp_tree = (BinaryTree*)malloc(sizeof(BinaryTree));
(*pp_tree)->n_value = num;
(*pp_tree)->p_left = NULL;
(*pp_tree)->p_right = NULL;
DynamicCreateTree(&((*pp_tree)->p_left));
DynamicCreateTree(&((*pp_tree)->p_right));
}