<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C++ 二叉樹的基本操作

      C++實(shí)現(xiàn)二叉樹的基本操作

      包括 添加節(jié)點(diǎn)、刪除節(jié)點(diǎn)、前序遍歷、中序遍歷、后續(xù)遍歷、層序遍歷、最大值、最小值、二叉樹的高度

      //Tree.h 頭文件

      #include <stdio.h>
       
      class Tree
      {
       private :
        //節(jié)點(diǎn)元素類型為結(jié)構(gòu)體
         struct LinkNode
         {
         int data;
         LinkNode *left;
         LinkNode *right;
         LinkNode(const int& dat,LinkNode *l,LinkNode *r):data(dat),left(l),right(r){}
         };
       
         LinkNode *head;//表頭節(jié)點(diǎn)

         //添加節(jié)點(diǎn)
            void AddTreeNode(LinkNode *node,LinkNode *newNode);
         //顯示中序排列
         void ShowCLR(LinkNode *root);
            //顯示前序排列
         void ShowLCR(LinkNode *root);
            //顯示右序排列
         void ShowLRC(LinkNode *root);
            //高度
         int  Height(LinkNode *root);

        public :
         //添加節(jié)點(diǎn)
         bool AddTreeNode(int  data);
         //顯示中序排列
         bool ShowCLR();
         //顯示前序排列
            bool ShowLCR();
            //顯示右序排列
         bool ShowLRC();
         //前序排列
         bool Floor();
            //最小值
         bool Min(int** minValue);
         //最大值
         bool Max(int** maxValue);
         //是否是空樹
         bool Empty();
         //高度
         void Height(int** height);

         ~Tree()
         {
            delete[] head;
         }

         Tree()
         {
            head=new LinkNode(-1,NULL,NULL);
         }
      };

      //實(shí)現(xiàn)文件Tree.cpp

      #include "stdafx.h"
      #include <stdio.h>
      #include<iostream>
      using namespace std ;
      #include "Tree.h";
      #include <queue>


      //添加節(jié)點(diǎn)
      void Tree::AddTreeNode(LinkNode *node,LinkNode *newNode)
      {
       if(node->data>newNode->data)
       {
        if(node->left==NULL)
        {
         node->left=newNode;
        }else{
         AddTreeNode(node->left,newNode);
        }

       }else if(node->data<newNode->data)
       {
        if(node->right==NULL)
        {
         node->right=newNode;
        }else{
            AddTreeNode(node->right,newNode);
        }
       }

      }

      //添加節(jié)點(diǎn)
      bool Tree::AddTreeNode(int data)
      {
       LinkNode *node=new LinkNode(data,NULL,NULL);
          if(head->left==NULL)
       {
        head->left=node;
       }
       AddTreeNode(head->left,node);

       return true;
      }

      //中序遍歷
      void Tree::ShowCLR(LinkNode *root)
      {
       if(root!=NULL){
        cout<<root->data<<"  ";
       }
         
       if(root->left!=NULL)
       {
        ShowCLR(root->left);
       }

       if(root->right!=NULL)
       {
        ShowCLR(root->right);
       }
      }

      //中序遍歷
      bool Tree::ShowCLR()
      {
       if(Empty())
       {
         return false;
       }
       ShowCLR(head->left);
       
       return true;
      }


      //前序遍歷
      void Tree::ShowLCR(LinkNode *root)
      {
       if(root->left!=NULL)
       {
        ShowLCR(root->left);
       }

       if(root!=NULL){
        cout<<root->data<<"  ";
       }
         
       if(root->right!=NULL)
       {
        ShowLCR(root->right);
       }
      }

      //前序遍歷
      bool Tree::ShowLCR()
      {
       if(Empty())
       {
         return false;
       }
       ShowLCR(head->left);
       
       return true;
      }

      //后序遍歷
      void Tree::ShowLRC(LinkNode *root)
      {
       if(root->left!=NULL)
       {
        ShowLRC(root->left);
       }

       if(root->right!=NULL)
       {
        ShowLRC(root->right);
       }

       if(root!=NULL){
        cout<<root->data<<"  ";
       }
      }

      //后序遍歷
      bool Tree::ShowLRC()
      {
       if(Empty())
       {
         return false;
       }
       ShowLRC(head->left);
       
       return true;
      }

      //最小值
      bool Tree::Min(int** minValue)
      {
       if(Empty())
       {
         return false;
       }
       LinkNode *tmp=head->left;
       while(tmp!=NULL && tmp->left!=NULL)
       {
          tmp=tmp->left;
       }
          **minValue= tmp->data;

       return true;
      }

      //最大值
      bool Tree::Max(int** maxValue)
      {
       if(Empty())
       {
         return false;
       }
       LinkNode *tmp=head->left;
       while(tmp!=NULL && tmp->right!=NULL)
       {
          tmp=tmp->right;
       }
          **maxValue= tmp->data;

       return true;
      }

      //判斷樹是否為空
      bool Tree::Empty()
      {
       return head->left==NULL;
      }

      //用隊(duì)列實(shí)現(xiàn)二叉樹層序遍歷
      //1:添加根節(jié)點(diǎn)
      //2:打印根節(jié)點(diǎn)的數(shù)據(jù),添加根節(jié)點(diǎn)的子節(jié)點(diǎn),彈出根節(jié)點(diǎn)
      //3:循環(huán)第二步
      bool Tree::Floor()
      {
          queue<LinkNode*> q;
       LinkNode* cur=head->left;
       q.push(head->left);
       while(!q.empty())
       {
        cur=q.front();
        cout<<cur->data<<"  ";

        if(cur->left!=NULL){
         q.push(cur->left);
        }
        if(cur->right!=NULL)
        {
         q.push(cur->right);
        }
        q.pop();
       }
       return true;

      }

      //求兩個(gè)數(shù)中較大的一個(gè)
      int max(int a,int b)
      {
       if(a>b)
       {
        return a;
       }else
       {
        return b;
       }
      }

      //遞歸求二叉樹的高度
      //二叉樹的高度就是左子樹和右子樹中較大一顆二叉樹的高度
      int Tree::Height(LinkNode *root)
      {
       if(root==NULL)
       {
        return 0;
       }
       return 1+max(Height(root->left),Height(root->right));
      }

      //用指向指針的指針接受二叉樹的高度
      void Tree::Height(int** height)
      {
       **height=Height(head->left);
      }

      #include "stdafx.h"
      #include <stdio.h>
      #include <iostream>
      using namespace std;
      #include "Tree.h"
       
      void TreeTest() ;

      int main()
      {
         TreeTest();
       int a=0;
       cin>>a;
          return 0;
      }
       

       //指針類型調(diào)用屬性和方法用“->” 對(duì)象類型用“.”
       //變量在不需要使用的時(shí)候就要釋放掉它的內(nèi)存
      void TreeTest()                  
      {                               
         Tree  tree;
         int a[]={1,3,6,7,8,2,4,9,10,5};
         for(int i=0;i<10;i++){
          tree.AddTreeNode(a[i]);
         }
         cout<<"-----------原始數(shù)組----------"<<endl;
         for(int i=0;i<10;i++)
         {
        cout<<a[i]<<"  "; 
         }

         cout<<endl;
         cout<<endl;
         cout<<"-----------中序排列----------"<<endl;
         tree.ShowCLR();
         cout<<endl;cout<<endl;
         cout<<"-----------前序排列----------"<<endl;
         tree.ShowLCR();
         cout<<endl;cout<<endl;
         cout<<"-----------后序排列----------"<<endl;
         tree.ShowLRC();
         cout<<endl;
         cout<<endl;
         cout<<"-----------層序排列----------"<<endl;
         cout<<endl;
         tree.Floor();
         cout<<endl;
         int min=-1;
         int *pmin=&min;
         tree.Max(&pmin);
          cout<<endl;
         cout<<"最大值:"<<min<<endl;
         cout<<endl;
         tree.Min(&pmin);
         cout<<"最小值:"<<min<<endl;
       
         cout<<endl;
         int h=-1;
         int *height=&h;
         tree.Height(&height);
         cout<<"高度:"<<h<<endl;
      }

      posted @ 2011-04-02 19:18  古文觀芷  閱讀(8764)  評(píng)論(2)    收藏  舉報(bào)
      主站蜘蛛池模板: 欧美亚洲一区二区三区在线| 99久久国产精品无码| 九九热精品在线观看视频| 韩国三级+mp4| 日韩精品国产另类专区| 国产欧洲欧洲久美女久久| 91密桃精品国产91久久 | 久久久久久久久毛片精品| 亚洲夂夂婷婷色拍ww47| 欧美日韩精品一区二区三区在线| 日韩免费码中文在线观看| 白嫩少妇无套内谢视频| 亚洲无人区一区二区三区| 免费看成人欧美片爱潮app| 二区中文字幕在线观看| 天天狠天天透天天伊人| 国产午夜福利小视频在线| 亚洲精品一区二区制服| 国产精品1区2区3区在线观看| 国产精品一区二区久久毛片| 国产精品自在拍首页视频8| 公安县| 久久精产国品一二三产品| 91蜜臀国产自产在线观看| 无码人妻一区二区三区免费N鬼沢| 国产成人精品日本亚洲| 色诱视频在线观看| 久久久国产精品樱花网站 | 免费无码又爽又刺激高潮虎虎视频| 熟女人妻aⅴ一区二区三区电影| 亚洲国产精品乱码一区二区| 国产一区二区不卡91| 国产裸体无遮挡免费精品| 欧美奶涨边摸边做爰视频| 一本久久a久久精品综合| 国产精品一码二码三码| 亚洲精品熟女国产| 亚洲国产一区二区三区最新| 亚洲欧洲自拍拍偷午夜色| 亚洲精品美女一区二区| 亚洲国产成人久久精品不卡 |