`
daideshun
  • 浏览: 6533 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

二叉树的基本操作

 
阅读更多
#include<iostream>
using namespace std;

/*
  定义二叉树的数据结构 
*/ 
  
  int MAXSIZE = 100;
  
  typedef struct Node{
        
       char data;
       struct Node* lchild;
       struct Node* rchild; 
   }*BitTree,BitNode; 

 //声明与二叉树相关的操作函数
   
    //1.初始化二叉树
   void InitBitTree(BitTree &T);
    //2.创建二叉树的操作
   void CreateBitTree(BitTree &T);
    //3.先序遍历二叉树
   void PreOrderBitTree(BitTree &T);
     //4.中序遍历二叉树
   void InOrderBitTree(BitTree &T);
    // 5.后序遍历二叉树
   void PostOrderBitTree(BitTree &T);
    //6.二叉树的层次遍历
   void LevelOrderBitTree(BitTree &T);
    //8.返回二叉树的叶子节点的个数
   int LeafNum(BitTree &T);
    //7.求二叉树的高度
   int BitTreeDepth(BitTree &T);
 
 
 
    //1.初始化二叉树
   void InitBitTree(BitTree &T){
        
        T = NULL;
   }
   
   
   //2.创建二叉树的操作
   void CreateBitTree(BitTree &T){
        
       char ch;
       cin>>ch;
      
      if(ch=='#')  { T = NULL;}
      else{
         T = (BitTree)malloc(sizeof(BitNode));
         if(T==NULL){
                     
            exit(-1);            
         }
         T->data = ch;
         CreateBitTree(T->lchild);
         CreateBitTree(T->rchild);
      }   
    
 }
    //3.先序遍历二叉树,采用非递归的方式遍历二叉树 
   void PreOrderBitTree(BitTree &T){
        
        BitTree  stack[MAXSIZE];
        int top = 0;
        BitTree p = T;
        while(p!=NULL||top>0){
                              
            while(p!=NULL){
              cout<<p->data<<" ";
              stack[top++] = p;
              p=p->lchild;              
            }                      
         if(top>0){
           
            p = stack[--top];
            p = p->rchild;        
         }      
     }
    cout<<endl;
}
 
   //4.中序遍历二叉树,采用非递归的方式遍历二叉树 
   void InOrderBitTree(BitTree &T){
        
          
        BitTree  stack[MAXSIZE];
        int top = 0;
        BitTree p = T;
        while(p!=NULL||top>0){
                              
            while(p!=NULL){
             
              stack[top++] = p;
              p=p->lchild;              
            }                      
         if(top>0){
           
            p = stack[--top];
            cout<<p->data<<" ";
            p = p->rchild;        
         }      
     }
    cout<<endl;
 }
 
    // 后序遍历二叉树,采用非递归的方式遍历二叉树 
   void PostOrderBitTree(BitTree &T){
       BitTree  stack[MAXSIZE];
       int top = 0;
       BitTree p = T;
       BitTree q = NULL;
        while(p!=NULL||top>0){
                              
            while(p!=NULL){
             
              stack[top++] = p;
              p=p->lchild;              
            }                      
         if(top>0){
           p = stack[top-1];
           if(p->rchild == NULL||p->rchild == q){
           
             cout<<p->data<<" ";
             top--;
             q=p;
             p=NULL;
                        
           }else{
             p = p->rchild;        
         }
       }      
   }
   cout<<endl;
}

   //6.二叉树的层次遍历
   void LevelOrderBitTree(BitTree &T){
        BitTree Queue[MAXSIZE];
        int front = -1;
        int rear = -1;
        rear++;
        Queue[rear] = T;
        BitTree p = NULL;
      while(front!=rear){
                         
          front = (front+1)%MAXSIZE;    
          p = Queue[front];
         cout<<p->data<<" ";
         if(p->lchild!=NULL){
         rear = (rear+1)%MAXSIZE;         
         Queue[rear] = p->lchild;                    
         }
         if(p->rchild!=NULL){
         rear = (rear+1)%MAXSIZE;         
         Queue[rear] = p->rchild;                    
         }
                    
      }
    cout<<endl;
   }
   
    //8.返回二叉树的叶子节点的个数
   int LeafNum(BitTree &T){
       
       if(!T) return 0;
       if(!(T->lchild)&&!(T->rchild))
       return 1;
       else
       return LeafNum(T->lchild)+LeafNum(T->rchild);
       
   }
    //7.求二叉树的高度
   int BitTreeDepth(BitTree &T){
       
       if(!T) return 0;
       
       int lh = BitTreeDepth(T->lchild);
       int rh = BitTreeDepth(T->rchild);
       return lh>rh?1+lh:1+rh;
       
   }
 
 
 int main(){
     
     BitTree T;
   
     cout<<"创建一个二叉树:"<<endl;
     CreateBitTree(T);
     
     cout<<"线序遍历二叉树:"<<endl; 
     PreOrderBitTree(T);
     
     cout<<"中序遍历二叉树:"<<endl;
     InOrderBitTree(T);
     
     cout<<"后序遍历二叉树:"<<endl;
     PostOrderBitTree(T);
     
     cout<<"按层次遍历二叉树:"<<endl;
     LevelOrderBitTree(T);
     
     cout<<"输出二叉树的叶子节点个数:"<<endl;
     cout<<LeafNum(T)<<endl;
     
     cout<<"输出二叉树的高度:"<<endl;
     cout<<BitTreeDepth(T)<<endl;
     
    system("pause");
    
    return 0;      
     
 }
分享到:
评论

相关推荐

    二叉树基本操作的程序实现

    二叉树基本操作的程序实现 二叉树是一种基础的数据结构,它广泛应用于计算机科学和软件工程领域。二叉树的基本操作包括建立二叉树、前序遍历、中序遍历、后序遍历等。这些操作是二叉树的基础,掌握这些操作是学习和...

    二叉树基本操作 数据结构 实验报告

    二叉树基本操作数据结构实验报告 本实验报告旨在实现二叉树的基本操作,包括定义二叉树的结构类型、初始化二叉树、检查二叉树是否为空、前序、中序、后序遍历树的方式、求树的深度、求树的结点数目、清空二叉树等九...

    C++二叉树基本操作

    这个压缩包文件“C++二叉树基本操作”显然是一个关于使用C++实现二叉树操作的示例代码集,对于学习C++和数据结构的人来说极具价值。 二叉树是由节点(或称为元素)构成的数据结构,每个节点最多有两个子节点,通常...

    《数据结构课程设计》二叉树基本操作实验程序(10种基本操作)

    在这个《数据结构课程设计》项目中,我们专注于二叉树的基本操作,通过两个源文件(file1.cpp 和 file2.cpp)以及一个头文件(head.h)实现了一系列的二叉树操作。以下是这些操作的详细说明: 1. **创建二叉树**:...

    二叉树基本操作

    1、根据输入的数据建立一个二叉树; 2、分别采用前序、中序、后序的遍历方式显示输出二叉树的遍历结果 3、采用非递归的编程方法,分别统计二叉树的节点个数、度为1、度为2和叶子节点的个数,以及数据值的最大值和...

    实验四 二叉树基本操作的实现

    在本实验中,我们将深入探讨数据结构中的一个重要概念——二叉树,并实现其基本操作。二叉树是一种非线性的数据结构,它由一个有限集合的节点构成,每个节点最多有两个子节点,通常称为左子节点和右子节点。这个实验...

    C语言二叉树基本操作

    以上就是C语言中二叉树基本操作的核心内容。通过创建节点、插入节点和进行前序遍历,我们可以对二叉树进行基本的操作和理解。这些概念是进一步学习二叉树的其他操作(如中序遍历、后序遍历、层次遍历等)的基础,也...

    二叉树基本操作代码(数据结构实验)

    1. 熟悉二叉树结点的结构和对二叉树的基本操作。 2. 掌握对二叉树每一种操作的具体实现。...4. 在二叉树基本操作的基础上掌握对二叉树的一些其它操作的具体实现方法。 5. 掌握构造哈夫曼树以及哈夫曼编码的方法

    二叉树基本操作的程序实现.zip_二叉树的基本操作

    这篇文档“二叉树基本操作的程序实现”涵盖了二叉树的一些核心概念和基本操作,旨在帮助初学者理解并实现这些概念。 二叉树由节点构成,每个节点最多有两个子节点,通常分为左子节点和右子节点。二叉树的主要类型有...

    数据结构 二叉树基本操作

    在实验三:二叉树基本操作中,学生将有机会编写代码来实现这些操作,加深对二叉树的理解,并掌握如何在实际问题中运用二叉树。通过这个实验,不仅可以提升编程技能,还能提高分析问题和解决问题的能力,为后续更复杂...

    二叉树的基本操作java代码

    以上就是关于二叉树基本操作的Java实现。理解这些操作对于理解和编写涉及数据结构的算法至关重要,因为二叉树在搜索、排序和许多其他应用中都有广泛的应用。通过实际的代码练习,你可以更好地掌握这些概念并提升编程...

    c语言版本二叉树基本操作示例(先序递归非递归)共10页.p

    本文将深入探讨C语言实现的二叉树基本操作,包括递归和非递归两种方法,以及先序遍历的概念。在标题和描述中提及的“c语言版本二叉树基本操作示例(先序递归非递归)共10页”很可能是一个详细的教程或代码示例集合,...

    二叉树基本操作设计及实现

    在本题中,我们被要求设计并实现基于单向链表的二叉树基本操作,包括生成、遍历查询以及叶节点的增加。 首先,我们要理解二叉树的基本概念。二叉树是由根节点、若干个子节点(或称为子树)构成的层次结构,每个节点...

    二叉树基本操作源代码

    以下是对二叉树基本操作的详细解释: 1. **二叉树的建立**: 在二叉链表中,建立二叉树通常涉及从数组、字符串或输入流中读取数据,然后创建相应的节点并链接它们。例如,从数组中构建二叉树时,可以遍历数组,将...

    C++实现二叉树基本操作详解

    C++ 实现二叉树基本操作详解 二叉树是一种重要的非线性数据结构,广泛应用于计算机科学和信息技术领域。为了帮助读者更好地理解和掌握二叉树的基本操作,本文将详细介绍 C++ 语言实现二叉树基本操作的方法和技术。 ...

    数据结构实用教程之二叉树,其中包含了:二叉树的定义、二叉树的递归遍历、二叉树基本操作。

    数据结构实用教程之二叉树,其中包含了:二叉树的定义、二叉树的递归遍历、二叉树基本操作。 数据结构实用教程之二叉树,其中包含了:二叉树的定义、二叉树的递归遍历、二叉树基本操作。 数据结构实用教程之二叉树,...

    二叉树的基本操作的源代码

    二叉树的基本操作源代码 二叉树是一种重要的数据结构,在计算机科学中有广泛的应用,本文将对二叉树的基本操作进行详细的介绍和分析。 一、实验目的 本实验的目的是为了熟悉二叉树的结构和基本操作,掌握对二叉树...

Global site tag (gtag.js) - Google Analytics