ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

考试复习_树

2021-12-19 20:00:54  阅读:118  来源: 互联网

标签:ch 复习 递归 BiTree 二叉树 rchild 考试 CreateBiTree


  1. 数据结构【二叉树】 先序遍历的顺序建立二叉链表:
#include<iostream>
using namespace std;
//二叉树的二叉链表存储表示
typedef struct BiNode
{ 
    char data; //结点数据域
    struct BiNode *lchild,*rchild;  //左右孩子指针
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T); //CreateBiTree
//用算法5.1 中序遍历的递归算法
void InOrderTraverse(BiTree T)
{ 
//中序遍历二叉树T的递归算法
if(T){
    InOrderTraverse(T->lchild);
    cout << T->data;
    InOrderTraverse(T->rchild);
	}
}
int main()
{
    BiTree tree;
    //cout<<"请输入建立二叉链表的序列:\n";
    CreateBiTree(tree);
    //cout<<"所建立的二叉链表中序序列:\n";
    InOrderTraverse(tree);
    cout<<endl;
    return 0;
}

void CreateBiTree(BiTree &T){ 
	//按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
    char ch;
    cin >> ch;
    if(ch=='#') T=NULL;     //递归结束,建空树
    else{ 
    T=new BiTNode;
    T->data=ch;    //生成根结点
    CreateBiTree(T->lchild);  //递归创建左子树
    CreateBiTree(T->rchild);  //递归创建右子树
	}    //else
}     //CreateBiTree

2数据结构【二叉树】前序遍历递归算法

#include<iostream>
using namespace std;
typedef struct BiNode{   //二叉链表定义
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
void PreorderTraverse(BiTree T);//先序遍历二叉树T的递归函数声明 
//用算法5.3 先序遍历的顺序建立二叉链表
void CreateBiTree(BiTree &T){ 
    //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
    char ch;
    cin >> ch;
    if(ch=='#') T=NULL;    //递归结束,建空树
    else{ 
    T=new BiTNode;
    T->data=ch; //生成根结点
    CreateBiTree(T->lchild);  //递归创建左子树
    CreateBiTree(T->rchild);  //递归创建右子树
    }   //else
}   //CreateBiTree
void PreorderTraverse(BiTree T){
    if(T==NULL) return;
    else{
     cout<< T->data;
     PreorderTraverse(T->lchild);
     PreorderTraverse(T->rchild);
     }
}
int main(){
    BiTree tree;
    //cout<<"请输入建立二叉链表的序列:\n";
    CreateBiTree(tree);
    //cout<<"先序遍历的结果为:\n";
    PreorderTraverse(tree);
    cout<<endl;
    return 0; 
}

3数据结构【二叉树】中序遍历递归算法

//算法5.1 中序遍历的递归算法
 #include<iostream>
 using namespace std;
     typedef struct BiNode{  //二叉链表定义
     char data;
     struct BiNode *lchild,*rchild;
 }BiTNode,*BiTree;
 void InOrderTraverse(BiTree T);//中序遍历二叉树T的递归函数声明
 //用算法5.3 先序遍历的顺序建立二叉链表
 void CreateBiTree(BiTree &T){ 
     //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
     char ch;
     cin >> ch;
     if(ch==&apos;#&apos;) T=NULL;  //递归结束,建空树
     else{    
      T=new BiTNode;
      T->data=ch;   //生成根结点
      CreateBiTree(T->lchild); //递归创建左子树
      CreateBiTree(T->rchild); //递归创建右子树
     }    //else
 }     //CreateBiTree

 int main(){
     BiTree tree;
     //cout<<"请输入建立二叉链表的序列:\n";
     CreateBiTree(tree);
     // cout<<"中序遍历的结果为:\n";
     InOrderTraverse(tree);
     cout<<endl;
     return 0; 
 }
 void InOrderTraverse(BiTree T){
     if (T==NULL) return; //空二叉树
     else{
       InOrderTraverse(T->lchild);//递归遍历左子树
     cout<<T->data; //访问根结点
     InOrderTraverse(T->rchild);//递归遍历右子树
     }
 }

4数据结构【二叉树】后序遍历递归算法

//算法5.1 后序遍历的递归算法

#include<iostream>
using namespace std;
typedef struct BiNode{   //二叉链表定义
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
void PostorderTraverse(BiTree T);//后序遍历二叉树T的递归函数声明 
//用算法5.3 先序遍历的顺序建立二叉链表
void CreateBiTree(BiTree &T){ 
//按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
    char ch;
    cin >> ch;
    if(ch=='#') T=NULL;     //递归结束,建空树
    else{ 
    T=new BiTNode;
    T->data=ch;    //生成根结点
    CreateBiTree(T->lchild);  //递归创建左子树
    CreateBiTree(T->rchild);  //递归创建右子树
    }     //else
}     //CreateBiTree
int main(){
    BiTree tree;
    //cout<<"请输入建立二叉链表的序列:\n";
    CreateBiTree(tree);
    //cout<<"后序遍历的结果为:\n";
    PostorderTraverse(tree);
    cout<<endl;
    return 0;
}
void PostorderTraverse(BiTree T){//后序
if(T==NULL) return;
 else{
      PostorderTraverse(T->lchild);
      PostorderTraverse(T->rchild);
      cout<<T->data;
 }
}

5数据结构【二叉树】统计二叉树中结点的个数

#include<iostream>
using namespace std;
//二叉树的二叉链表存储表示
typedef struct BiNode
{ 
    char data; //结点数据域
    struct BiNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
int NodeCount(BiTree T);// 
//用算法5.3建立二叉链表
void CreateBiTree(BiTree &T)
{ 
    //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
    char ch;
    cin >> ch;
    if(ch=='#') T=NULL; //递归结束,建空树
    else{ 
    T=new BiTNode;
    T->data=ch; //生成根结点
    CreateBiTree(T->lchild); //递归创建左子树
    CreateBiTree(T->rchild); //递归创建右子树
    } //else
} //CreateBiTree
int main(){
BiTree tree;
//cout<<"请输入建立二叉链表的序列:\n";
CreateBiTree(tree);
cout<<"结点个数为:"<<NodeCount(tree)<<endl;
}
int NodeCount(BiTree T){
 if(T==NULL) return 0;
 else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
}

6数据结构【二叉树】求树的深度

#include<iostream>
using namespace std;
//二叉树的二叉链表存储表示
typedef struct BiNode
{ 
    char data; //结点数据域
    struct BiNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
int Depth(BiTree T); //求深度函数声明 
//用算法5.3建立二叉链表
void CreateBiTree(BiTree &T)
{ 
    //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
    char ch;
    cin >> ch;
    if(ch=='#')  T=NULL; //递归结束,建空树
    else{ 
    T=new BiTNode;
    T->data=ch; //生成根结点
    CreateBiTree(T->lchild); //递归创建左子树
    CreateBiTree(T->rchild); //递归创建右子树
    } //else
} //CreateBiTree
int main(){
    BiTree tree;
    // cout<<"请输入建立二叉链表的序列:\n";
    CreateBiTree(tree);
    cout<<"树的深度为:"<<Depth(tree)<<endl;
    return 0;
}
int Depth(BiTree T)
{
       if(T==NULL)
              return 0;
       else{
              int a = Depth(T->lchild);
              int b = Depth(T->rchild);
              return (a>b)?(a+1):(b+1);
       }
}

7 数据结构【二叉树】统计二叉树中叶子结点的个数

//算法5.7 统计二叉树中叶子结点的个数
 #include<iostream>#include<iostream>
 using namespace std;
 typedef struct BiNode{  //二叉链表定义
   char data;
   struct BiNode *lchild,*rchild;
 }BiTNode,*BiTree;
 void Leafnum(BiTree T, int &n);
 void CreateBiTree(BiTree &T){
   //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
   char ch;
   cin >> ch;
   if(ch==&apos;#&apos;) T=NULL;  //递归结束,建空树
   else{
     T=new BiTNode;
     T->data=ch;   //生成根结点
     CreateBiTree(T->lchild); //递归创建左子树
     CreateBiTree(T->rchild); //递归创建右子树
   }    //else
 }     //CreateBiTree
 int main(){
   BiTree tree;
   int n=0;
   //cout<<"请输入建立二叉链表的序列:";
   CreateBiTree(tree);
   Leafnum(tree,n);
   cout<<n<<endl;
   return 0;
 }
 void Leafnum(BiTree T, int &n){
     if(T){
     if(!T->lchild&&!T->rchild)
     (n)++;
     Leafnum(T->lchild,n);
     Leafnum(T->rchild,n);
     }
 }

标签:ch,复习,递归,BiTree,二叉树,rchild,考试,CreateBiTree
来源: https://www.cnblogs.com/muxin520/p/15708374.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有