• 数据结构躬行记5_数据结构_二叉树及其基本操作(c++)


    二叉树

    概念

    二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。

    要点

    二叉树的创建和遍历包含了一种很重要的思想那就是递归,遍历包含:先序遍历,中序遍历,后续遍历,递归创建的时候也必须先指定一种创建顺序。

    代码实现

      1 #include<iostream>
      2 using namespace std;
      3 typedef string eletype;
      4 typedef struct BiNode
      5 {
      6     eletype data;
      7     struct BiNode *lchild,*rchild;
      8 }BiNode,*BiTree;
      9 
     10 void creatBiTree(BiTree &t)
     11 {
     12     string m;
     13     cin>>m;
     14     if(m =="#" )
     15         t =NULL;
     16     else{
     17         t = new BiNode;
     18         t->data = m;
     19         creatBiTree(t->lchild);
     20         creatBiTree(t->rchild);
     21     }
     22 
     23 }
     24 
     25 void showBitree_zx(BiTree t)
     26 {
     27     if(t==NULL){
     28 
     29     }else{
     30     showBitree_zx(t->lchild);
     31     cout<<t->data<<" ";
     32     showBitree_zx(t->rchild);
     33     }
     34 }
     35 
     36 void showBitree_xx(BiTree t)
     37 {
     38     if(t==NULL){
     39 
     40     }else{
     41     cout<<t->data<<" ";
     42     showBitree_xx(t->lchild);
     43     showBitree_xx(t->rchild);
     44     }
     45 }
     46 
     47 void showBitree_hx(BiTree t)
     48 {
     49     if(t==NULL){
     50 
     51     }else{
     52     showBitree_hx(t->lchild);
     53     showBitree_hx(t->rchild);
     54     cout<<t->data<<" ";
     55     }
     56 }
     57 
     58 int Depth(BiTree t)
     59 {
     60     int m,n;
     61     if(t == NULL){
     62         return 0;
     63     }else{
     64     m =Depth(t->lchild);
     65     n=Depth(t->rchild);
     66     if(m>n)
     67     {
     68         return m+1;
     69     }
     70     else{
     71         return n+1;
     72     }
     73     }
     74 }
     75 
     76 int NodeCount(BiTree t)
     77 {
     78     if(t ==NULL){
     79         return 0;
     80     }
     81     else{
     82         return NodeCount(t->lchild)+NodeCount(t->rchild)+1;
     83     }
     84 }
     85 
     86 int main()
     87 {
     88     BiTree t = new BiNode;
     89     cout<<"请按照先序的顺序输入节点数据(#代表为空):"<<endl;
     90     creatBiTree(t);
     91 
     92     cout<<"中序遍历:";
     93     showBitree_zx(t);
     94     cout<<endl;
     95 
     96     cout<<"先序遍历:";
     97     showBitree_xx(t);
     98     cout<<endl;
     99 
    100     cout<<"后序遍历:";
    101     showBitree_hx(t);
    102     cout<<endl;
    103 
    104     cout<<"此二叉树的深度是:"<<Depth(t);
    105     cout<<endl;
    106 
    107     cout<<"此二叉树的结点个数是:"<<NodeCount(t);
    108     cout<<endl;
    109 
    110   return 0;
    111 }
  • 相关阅读:
    SQLite存储类(数据类型)
    SQLite常用命令
    C# 跨线程操作无效
    Android打开新的Activity并同时关闭当前Activity
    SQLite实现Top功能
    Android调用Sqlite数据库时自动生成db-journal文件的原因
    C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用
    Android计算时间差
    PS通道抠图总结
    Android再次激活Activity时触发事件用于列表重新读取载入
  • 原文地址:https://www.cnblogs.com/g414056667/p/13681902.html
Copyright © 2020-2023  润新知