二叉树的基本操作(节点创建、二叉树的创建、遍历、叶子结点的数量、二叉搜索树的插入、二叉搜索树的检索)
程序员文章站
2022-03-03 09:57:53
...
二叉树的基本操作(节点创建、二叉树的创建、遍历、叶子结点的数量、二叉搜索树的插入、二叉搜索树的检索)
- 节点创建
//节点定义
typedef struct BTreeNode
{
int data;
struct BTreeNode* lchild;
struct BTreeNode* rchild;
}BTreeNode;
typedef BTreeNode* btreenode;
//创建节点
BTreeNode* CreateNode(int val)
{
BTreeNode* p = (BTreeNode*)malloc(sizeof(btreenode));
p->data = val;
p->lchild = p->rchild = NULL;
return p;
}
- 二叉树的创建
//二叉树的创建
struct BTreeNode* Create()
{
int val;
scanf("%d",&val);
struct BTreeNode* root = (struct BTreeNode*)malloc(sizeof(struct BTreeNode*));
if (val < 0)
{
return NULL;
}
if (!root)
{
printf("创建失败\n");
}
if (val > 0)
{
root->data = val;
root->lchild = Create();
root->rchild = Create();
}
return root;
}
二叉树的遍历(前序、中序、后序)
//前序遍历
void FronTraval(btreenode root)
{
if (root == NULL)
{
return;
}
printf("%d",root->data);
FronTraval(root->lchild);
FronTraval(root->rchild);
}
//中序遍历
void Midtraval(btreenode root)
{
if (root == NULL)
{
return;
}
FronTraval(root->lchild);
printf("%d", root->data);
FronTraval(root->rchild);
}
//后序遍历
void Midtraval(btreenode root)
{
if (root == NULL)
{
return;
}
FronTraval(root->lchild);
FronTraval(root->rchild);
printf("%d", root->data);
}
- 叶子节点的数量
//二叉树的叶子节点的数量
int LeafNode(btreenode root)
{
if (root == NULL)
{
return 0;
}
if (root->lchild == NULL && root->rchild == NULL)
{
return 1;
}
else
{
return LeafNode(root->lchild) + LeafNode(root->rchild);
}
}
- 二叉搜索树的插入
//二叉搜索树的插入
void InsertNode(btreenode root, int val)
{
if (root == NULL)
{
return;
}
int rootData = root->data;
//根据值得大小创建相应的节点(左节点)
if (root->lchild == NULL && val < rootData)
{
root->lchild = CreateNode(val);
return;
}
//根据值得大小创建相应的节点(右节点)
if (root->rchild == NULL && val > rootData)
{
root->rchild = CreateNode(val);
return;
}
//将值放入相应的节点
if (val > rootData)
{
InsertNode(root->rchild, val);
}
else if (val < rootData)
{
InsertNode(root->lchild, val);
}
}
- 二叉树的检索
//二叉搜索树的检索(递归实现)
void SearchData(int val, btreenode root)
{
if (root != NULL)
{
if (root->data == val)
{
printf("%d\n",root->data);
}
else if (val > root->data)
{
SearchData(val,root->lchild);
}
else if (val < root->data)
{
SearchData(val,root->rchild);
}
}
}
推荐阅读
-
SWUST-973 976 975-统计利用先序遍历创建的二叉树的度为0,1,2的结点个数
-
C语言 二叉树 统计二叉树中度为0,1和2的结点个数【树和二叉树】给定先序序列,按照该序列创建对应的二叉树,并输出该二叉树度为0,1和2的结点个数。输入:一行,二叉树按先序遍历序列,空指针用字符^占位
-
二叉树(十六):二叉搜索树中的插入操作
-
二叉树的基本操作(创建,遍历,求高度,叶子节点个数...)
-
二叉树的基本操作:创建、查找、插入、遍历、还原二叉树
-
二叉树的创建,遍历输出,求二叉树叶子节点,求二叉树深度
-
二叉搜索树的创建、插入、遍历、删除
-
[ 二叉树 ] 二叉搜索树中的插入操作
-
二叉树的创建,二叉搜索树的创建,(前序,中序,后序遍历)
-
二叉树的基本操作(节点创建、二叉树的创建、遍历、叶子结点的数量、二叉搜索树的插入、二叉搜索树的检索)