二叉树操作
来源:互联网 发布:淘宝账号申请及注册 编辑:程序博客网 时间:2024/05/29 16:31
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;typedef struct BiNide{ char data; struct BiNide *lchild,*rchild;}BiTNode,*BiTree;void CreateBiTree(BiTree &T){//二叉树的存储 char ch; cin>>ch; if(ch=='#')//如果输入为#,那么当前的节点为空 T=NULL; else{ T=new BiTNode; T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); }} int Depth(BiTree T){//求二叉树的深度 int a,b; if(T==NULL) return 0; else{ a=Depth(T->lchild); b=Depth(T->rchild); if(a>b) return (a+1); else return (b+1); }}int PrintAtLevel(BiTree T,int number_Of_Depth){//二叉树按层输出 if(T==NULL || number_Of_Depth<0) return 0; cout<<T->data<<" "; return PrintAtLevel(T->lchild,number_Of_Depth-1)+PrintAtLevel(T->rchild,number_Of_Depth-1);}int NodeCount(BiTree T){// 二叉树结点的个数 if(T==NULL) return 0; else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;}int m=0;int count_Of_Leaf(BiTree T){//二叉树的叶子节点的个数 if(T==NULL) return 0; else if(T->lchild==NULL&&T->rchild==NULL) m++; else{ count_Of_Leaf(T->lchild); count_Of_Leaf(T->rchild); } return m;}void PreOrderTraverse(BiTree T){//前序遍历二叉树 if(T){ cout<<T->data<<" "; PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); }}void InOrderTraverse(BiTree T){//中序遍历二叉树 if(T){ InOrderTraverse(T->lchild); cout<<T->data<<" "; InOrderTraverse(T->rchild); }}void PostOrderTraverse(BiTree T){//后序遍历二叉树 if(T){ PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); cout<<T->data<<" "; }}void ChangeLR(BiTree &T){//左右子树的交换 if(T==NULL) return ; else if(T->lchild==NULL&&T->rchild==NULL) return ; else{ BiTree temp; temp=T->lchild; T->lchild=T->rchild; T->rchild=temp; } ChangeLR(T->lchild); ChangeLR(T->rchild); }int main(){ BiTree tree;int number;cout<<"请输入建立二叉链表的序列:\n";CreateBiTree(tree);number=Depth(tree);cout<<"数的深度为:"<<number<<endl; cout<<"按层遍历后的二叉树为:"<<endl;PrintAtLevel(tree,number);cout<<endl; cout<<"树的结点个数为:"<<NodeCount(tree)<<endl; cout<<"树的叶子结点个数为:"<<count_Of_Leaf(tree)<<endl; cout<<"前序遍历二叉树后为:"<<endl;PreOrderTraverse(tree);cout<<endl; cout<<"中序遍历二叉树后为:"<<endl;InOrderTraverse(tree);cout<<endl; cout<<"后序遍历二叉树后为:"<<endl;PostOrderTraverse(tree); cout<<endl; ChangeLR(tree);cout<<"左右子树交换后前序遍历的二叉树为:"<<endl;PreOrderTraverse(tree);cout<<endl; return 0;return 0;}
0 0
- 二叉树的操作
- 二叉树的操作
- 二叉树的操作
- 二叉树常用操作
- 二叉树的操作
- 二叉树 常见操作
- 二叉树基本操作
- 二叉树相关操作
- 二叉树 基本操作
- 二叉树的操作
- 二叉树基本操作
- 二叉树操作
- 二叉树 一些操作
- 二叉树操作
- 数据结构-二叉树操作
- 二叉树的操作
- 二叉树操作
- 二叉树的操作
- QQ客服弹窗js
- ajax请求php中生成的html代码
- 阻塞与非阻塞 同步与异步
- 数据建模
- zookeeper之实践一
- 二叉树操作
- 大众点评的大数据实践
- easyui combogrid onChanage 问题
- phpcms定时发布文章解决办法
- 条件编译
- 我的Java开发学习之旅------>Java经典排序算法之归并排序
- 试试 ECMAScript 6
- Android Superuser 提权漏洞分析
- 集中化运维管理——Puppet管理之路