二叉树的详细实现(含递归展开图)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的详细实现(含递归展开图)相关的知识,希望对你有一定的参考价值。
(文章目录)
一、二叉树
1. 概念
2.特点
3.特殊二叉树
1.满二叉树
2.完全二叉树
4.性质
性质1.
性质2.
性质3.
性质4.
二、二叉树整体实现
1.前序的实现
void prevorder(BTnode* root)//前序 根 左子树 右子树
if (root == NULL)
printf("NULL ");
return;
printf("%c ", root->data);
prevorder(root->left);
prevorder(root->right);
递归展开图
2.中序的实现
void inorder(BTnode* root)//中序 左子树 根 右子树
if (root == NULL)
printf("NULL ");
return;
inorder(root->left);
printf("%c ", root->data);
inorder(root->right);
递归展开图
3.后序的实现
void postorder(BTnode* root)//后序 左子树 右子树 根
if (root == NULL)
printf("NULL ");
return;
postorder(root->left);
postorder(root->right);
printf("%c ", root->data);
递归展开图
4. 节点个数
int treesize(BTnode* root)//节点个数
if (root == NULL)
return 0;
return treesize(root->left) + treesize(root->right) + 1;
递归展开图
5. 叶节点个数
int treeleafsize(BTnode* root)//叶子节点的个数
if (root == NULL)
return 0;
if (root->left == NULL && root->right == NULL)//只有当左右子树都为NULL时才会返回1
return 1;
return treeleafsize(root->left)+ treeleafsize(root->right);
递归展开图
6.层序遍历
void levelorder(BTnode* root)//层序遍历 需要借助数据结构栈来实现
queue q;
queueinit(&q);//初始化栈
if (root)
queuepush(&q, root);//将根结点入栈
while (!queueempty(&q))
datatype front=queuefront(&q);//出栈
queuepop(&q);//删除栈顶元素
printf("%c ", front->data);
if (front->left != NULL)
queuepush(&q, front->left);//判断此时该结点的左子树是否为空 若不空则入栈
if (front->right != NULL)
queuepush(&q, front->right);//判断此时该结点的右子树是否为空 若不空则入栈
queuedestroy(&q);//销毁内存
以上是关于二叉树的详细实现(含递归展开图)的主要内容,如果未能解决你的问题,请参考以下文章