二叉树的创建,遍历输出,求二叉树叶子节点,求二叉树深度
程序员文章站
2022-05-16 11:26:25
...
二叉树相关操作
关键点:利用递归操作
1.二叉树的创建
2.遍历算法(先序输出,中序输出,后序输出)
3.求二叉树的高度
4.求二叉树的叶子节点的个数
二叉树的创建
//二叉树的创建
typedef struct BiTnode
{
char data;
struct BiTnode *lchild,*rchild;
}BiNode,*Bitree;
输入先序遍历序列:
利用先序遍历输出序列建立二叉树
例如:
输入先序遍历序列:[email protected]@@@[email protected]@@
BiNode* creatBitree()
{
Bitree T;
char ch;scanf("%c",&ch);
if(ch=='@') T=NULL;
else{
T=(BiNode*)malloc(sizeof(BiNode));
T->data=ch;
T->lchild=creatBitree();
T->rchild=creatBitree();
}
return T;
}
二叉树的输出
先序遍历序列输出:
void output(Bitree T)
{
if(T)
{
printf("%c",T->data);
output(T->lchild);
output(T->rchild);
}
}
中序遍历序列输出
void output(Bitree T)
{
if(T)
{
output(T->lchild);
printf("%c",T->data);
output(T->rchild);
}
}
后序遍历序列输出
void output(Bitree T)
{
if(T)
{
output(T->lchild);
output(T->rchild);
printf("%c",T->data);
}
}
求二叉树的深度
int Depth(Bitree T)
{
int depl,depr;
if(T==NULL) return 0;
else {
depl=Depth(T->lchild);
depr=Depth(T->rchild);
if(depl>=depr) return(depl+1);
else return(depr+1);
}
}
求二叉树叶子节点的个数
int LeafCount(Bitree T)
{
if(!T) return 0;
else
if(T->lchild==NULL&&T->rchild==NULL) return 1;
else return LeafCount(T->lchild)+LeafCount(T->rchild);
}
全代码
#include <bits/stdc++.h>
using namespace std;
typedef struct BiTnode
{
char data;
struct BiTnode *lchild,*rchild;
}BiNode,*Bitree;
BiNode* creatBitree()
{
Bitree T;
char ch;
scanf("%c",&ch);
if(ch=='@') T=NULL;
else{
T=(BiNode*)malloc(sizeof(BiNode));
T->data=ch;
T->lchild=creatBitree();
T->rchild=creatBitree();
}
return T;
}
int Depth(Bitree T)
{
int depl,depr;
if(T==NULL) return 0;
else {
depl=Depth(T->lchild);
depr=Depth(T->rchild);
if(depl>=depr) return(depl+1);
else return(depr+1);
}
}
void output(Bitree T)
{
if(T)
{
output(T->lchild);
output(T->rchild);
printf("%c",T->data);
}
}
int LeafCount(Bitree T)
{
if(!T) return 0;
else
if(T->lchild==NULL&&T->rchild==NULL) return 1;
else return LeafCount(T->lchild)+LeafCount(T->rchild);
}
void output1(Bitree T)
{
}
int main()
{
Bitree T;
int depth,sum;
T=creatBitree();
depth=Depth(T);
printf("%d\n",depth);
//遍历二叉树求树的高度
output(T);
//遍历输出二叉树
sum=LeafCount(T);
printf("%d\n",sum);
//求二叉树的叶子节点个数
return 0;
}
推荐阅读
-
求二叉树的层序遍历 python版本
-
由某习题联想到的二叉树广义表表示法求深度(C语言)
-
求二叉树中两个节点的最近公共祖先(三叉链,搜索树,普通二叉树)
-
判断一棵树是否是完全二叉树和求二叉树中两个节点的最近公共祖先——题集(十三)
-
递归求二叉树中某一节点的后继
-
数据结构-二叉树(求二叉树叶子节点数的递归和非递归算法)
-
LeetCode 543. 二叉树的直径 (递归、求二叉树的深度)
-
求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义
-
C语言 二叉树 统计二叉树中度为0,1和2的结点个数【树和二叉树】给定先序序列,按照该序列创建对应的二叉树,并输出该二叉树度为0,1和2的结点个数。输入:一行,二叉树按先序遍历序列,空指针用字符^占位
-
二叉树的基本操作(创建,遍历,求高度,叶子节点个数...)