C语言遍历二叉树的递归调用操作集
来源:互联网 发布:java三级证书有用吗 编辑:程序博客网 时间:2024/05/22 03:11
#include <string.h>
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode* lchild;
struct BiTNode* rchild;
}BiTNode, *BiTree;
void createBiTree(BiTree &T)
{
char data;
data = getchar();
if(data == '#')
{
T = NULL;
}
else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=data;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}
void preOrderTraverse(BiTree &T) //先序遍历递归
{
if(T)
{
printf("%c",T->data);
preOrderTraverse(T->lchild);
preOrderTraverse(T->rchild);
}
}
void inOrderTraverse(BiTree &T) //中序遍历递归
{
if(T)
{
inOrderTraverse(T->lchild);
printf("%c",T->data);
inOrderTraverse(T->rchild);
}
}
void postOrderTraverse(BiTree &T) //后序遍历递归
{
if(T)
{
postOrderTraverse(T->lchild);
postOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
void destroyTraverse(BiTree &T) //销毁二叉树递归
{
if(T)
{
destroyTraverse(T->lchild);
destroyTraverse(T->rchild);
free(T);
T=NULL;
}
}
int lengthTraverse(BiTree &T) //树的深度递归
{
int ldepth;
int rdepth;
if(T==NULL)
{
return 0;
}
ldepth=lengthTraverse(T->lchild);
rdepth=lengthTraverse(T->rchild);
return (ldepth>rdepth)? (ldepth+1):(rdepth+1);
}
int leafnumberTraverse(BiTree &T) //求树的叶子节点递归
{
if(T==NULL)
{
return 0;
}
if(T->lchild==NULL&&T->rchild==NULL)
return 1;
return leafnumberTraverse(T->lchild)+leafnumberTraverse(T->rchild);
}
void exchangechild(BiTree &T) //交换树的左右孩子递归
{
BiTree temp;
if(T)
{
temp=NULL;
if(T->lchild||T->rchild)
temp=T->lchild;
T->lchild=T->rchild;
T->rchild=temp;
exchangechild(T->lchild);
exchangechild(T->rchild);
}
}
int main()
{
BiTree T = NULL;
printf("请输入需要建立二叉树的序列:\n"); //大兄弟,如果不能显示那么就是你输入的问题:尝试输入 ABE###CD### 意思就是A( B(E),C(D) )
createBiTree(T);
printf("先序递归遍历: ");
preOrderTraverse(T);
printf("\n中序递归遍历:");
inOrderTraverse(T);
printf("\n后序递归遍历:");
postOrderTraverse(T);
printf("\n树的高度为:%3d\n", lengthTraverse(T));
printf("\n树的 叶子节点个数为:%3d\n",leafnumberTraverse(T));
exchangechild(T);
printf("\n对交换后的数进行先序递归遍历:\n ");
preOrderTraverse(T);
return 0;
}
阅读全文
0 0
- C语言遍历二叉树的递归调用操作集
- C语言二叉树的遍历,递归和非递归
- 二叉树遍历的c语言非递归实现
- 二叉树的遍历(c语言非递归算法)
- 二叉树的非递归遍历C语言实现
- 【算法】二叉树的递归遍历C语言实现
- C语言实现二叉树的递归遍历与非递归遍历
- C语言实现二叉树的递归遍历和非递归遍历
- C语言实现二叉树的递归遍历与非递归遍历
- C语言进行二叉树的递归遍历和非递归遍历
- 八.二叉树各种操作的C语言实现 二叉树中各种遍历的非递归和递归算法的实现
- 二叉树的非递归遍历操作
- 二叉树的遍历 非递归操作
- ~二叉树的非递归遍历操作~
- 二叉树的遍历--非递归操作
- C语言二叉树遍历操作
- C语言实现二叉树的常用的算法(递归与非递归实现遍历)
- 遍历二叉树的递归算法与非递归算法以及C语言实现
- 念整数 乐学题目10.29完成
- 千万别让独立的姑娘也心寒
- Java Web 登录采用非对称加密(RSA算法)
- 分享一些帮助你提升效(bi)率(ge)的干货!
- 浅析“区块链”技术
- C语言遍历二叉树的递归调用操作集
- Qt Android 冲突库
- struts2拦截器小结
- C语言行程编码压缩算法
- python 手记8 〖笨方法学python习题29〗
- android 系统架构
- 结合redis设计与实现的redis源码学习-10-hyperloglog(基数统计)
- egret白鹭引擎出现不能操作数组情况的解决方法
- 高级聚合函数-CUBE