二叉树先序遍历(递归算法)
2007-06-10 16:00
323 查看
/**********1 先序遍历生成二叉树
2 单个生结点生成二叉树
3 求二叉树叶结点和
4 求二叉树树高
#include<stdio.h>
#include<malloc.h>
typedef struct BiTnode{
int data;
struct BiTnode *lchild;
struct BiTnode *rchild;
}BiTnode,*BiTree;
void CreateBiTree(BiTree &T)
{//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,
//构造二叉链表表示的二叉树T
int ch =0;
scanf("%d",&ch);
if(ch == 8) T = NULL; //当输入数字8时表示子树为空
else {
if(!(T = (BiTnode *)malloc(sizeof(BiTnode)))) return;
T->data = ch; //生成根结点
CreateBiTree(T->lchild); //构造左子树
CreateBiTree(T->rchild); //构造右子树
}
}
/*(创建二叉树)
void CreateBiTree(BiTree &T)
{//单个生成结点并赋值
printf("输入7个树结点的值:");
T=(BiTree)malloc(sizeof(BiTnode));
BiTree p1=T;
BiTree p2=(BiTree)malloc(sizeof(BiTnode));
BiTree p3=(BiTree)malloc(sizeof(BiTnode));
BiTree p4=(BiTree)malloc(sizeof(BiTnode));
BiTree p5=(BiTree)malloc(sizeof(BiTnode));
BiTree p6=(BiTree)malloc(sizeof(BiTnode));
BiTree p7=(BiTree)malloc(sizeof(BiTnode));
scanf("%d",&p1->data);p1->lchild = p2; p1->rchild = p6;
scanf("%d",&p2->data);p2->lchild = p3; p2->rchild = p5;
scanf("%d",&p3->data);p3->lchild = p4; p3->rchild = NULL;
scanf("%d",&p4->data);p4->lchild = NULL; p4->rchild = NULL;
scanf("%d",&p5->data);p5->lchild = NULL; p5->rchild = NULL;
scanf("%d",&p6->data);p6->lchild = NULL; p6->rchild = p7;
scanf("%d",&p7->data);p7->lchild = NULL; p7->rchild =NULL;
}
*/
void DLR(BiTree T)
{//递归先序遍历二叉树
if(!T)
return;
else
{
printf("%d ",T->data); //根结点
DLR(T->lchild); //左子树
DLR(T->rchild); //右子树
}
}
int SumYe(BiTree T)
{//求二叉树叶结点数之和
if(!T) return 0;
if(!T->lchild && !T->rchild ) return 1;
return SumYe(T->lchild)+SumYe(T->rchild);
}
int HightTree(BiTree T)
{//求二叉树高
int hl = 0;//记录左子树高
int hr = 0;//记录右子树高
if(!T) return 0;
hl = HightTree(T->lchild);
hr = HightTree(T->rchild);
return (hl>hr) ? hl+1 : hr+1 ;
}
int main(void)
{
int a = 0;//记录二叉树叶结点数之和
int b = 0;//记录二叉树树高
BiTree T;
printf("输入二叉树的值:");
CreateBiTree(T);
DLR(T);
a=SumYe(T);
b=HightTree(T);
printf("/n%d %d",a,b);
return 0;
}
2 单个生结点生成二叉树
3 求二叉树叶结点和
4 求二叉树树高
#include<stdio.h>
#include<malloc.h>
typedef struct BiTnode{
int data;
struct BiTnode *lchild;
struct BiTnode *rchild;
}BiTnode,*BiTree;
void CreateBiTree(BiTree &T)
{//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,
//构造二叉链表表示的二叉树T
int ch =0;
scanf("%d",&ch);
if(ch == 8) T = NULL; //当输入数字8时表示子树为空
else {
if(!(T = (BiTnode *)malloc(sizeof(BiTnode)))) return;
T->data = ch; //生成根结点
CreateBiTree(T->lchild); //构造左子树
CreateBiTree(T->rchild); //构造右子树
}
}
/*(创建二叉树)
void CreateBiTree(BiTree &T)
{//单个生成结点并赋值
printf("输入7个树结点的值:");
T=(BiTree)malloc(sizeof(BiTnode));
BiTree p1=T;
BiTree p2=(BiTree)malloc(sizeof(BiTnode));
BiTree p3=(BiTree)malloc(sizeof(BiTnode));
BiTree p4=(BiTree)malloc(sizeof(BiTnode));
BiTree p5=(BiTree)malloc(sizeof(BiTnode));
BiTree p6=(BiTree)malloc(sizeof(BiTnode));
BiTree p7=(BiTree)malloc(sizeof(BiTnode));
scanf("%d",&p1->data);p1->lchild = p2; p1->rchild = p6;
scanf("%d",&p2->data);p2->lchild = p3; p2->rchild = p5;
scanf("%d",&p3->data);p3->lchild = p4; p3->rchild = NULL;
scanf("%d",&p4->data);p4->lchild = NULL; p4->rchild = NULL;
scanf("%d",&p5->data);p5->lchild = NULL; p5->rchild = NULL;
scanf("%d",&p6->data);p6->lchild = NULL; p6->rchild = p7;
scanf("%d",&p7->data);p7->lchild = NULL; p7->rchild =NULL;
}
*/
void DLR(BiTree T)
{//递归先序遍历二叉树
if(!T)
return;
else
{
printf("%d ",T->data); //根结点
DLR(T->lchild); //左子树
DLR(T->rchild); //右子树
}
}
int SumYe(BiTree T)
{//求二叉树叶结点数之和
if(!T) return 0;
if(!T->lchild && !T->rchild ) return 1;
return SumYe(T->lchild)+SumYe(T->rchild);
}
int HightTree(BiTree T)
{//求二叉树高
int hl = 0;//记录左子树高
int hr = 0;//记录右子树高
if(!T) return 0;
hl = HightTree(T->lchild);
hr = HightTree(T->rchild);
return (hl>hr) ? hl+1 : hr+1 ;
}
int main(void)
{
int a = 0;//记录二叉树叶结点数之和
int b = 0;//记录二叉树树高
BiTree T;
printf("输入二叉树的值:");
CreateBiTree(T);
DLR(T);
a=SumYe(T);
b=HightTree(T);
printf("/n%d %d",a,b);
return 0;
}
相关文章推荐
- 用递归算法根据中序和先序遍历创建二叉树
- 递归算法先序遍历二叉树
- 实现二叉树的先序遍历、中序遍历、后序遍历的递归非递归算法以及层次遍历算法
- 先序遍历二叉树的递归算法
- 二叉树简历 先序遍历
- 已知二叉树先序遍历,中序遍历创建二叉树并输出后序遍历
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 求二叉树的先序遍历 sdut 1489
- 根据中序遍历和先序遍历,后序遍历创建二叉树。
- 每日编程9之二叉树的先序遍历递归版本
- 二叉树的创建(先序创建的)及先序遍历 中序遍历 后序遍历的递归和非递归实现
- 二叉树的建立及遍历(先序遍历、中序遍历、后续遍历、层次遍历)
- 二叉树先序遍历、中序遍历、后序遍历
- 【LeetCode】144. Binary Tree Preorder Traversal-二叉树先序遍历
- 第十周 项目2 二叉树的遍历递归算法
- 实现二叉树的先序遍历、中序遍历、后序遍历
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 【leetcode】二叉树先序遍历(stack)
- 七:重建二叉树(根据先序遍历(或者后序遍历)和中序遍历重建二叉树)