青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

emptysoul

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  25 Posts :: 0 Stories :: 23 Comments :: 0 Trackbacks

常用鏈接

留言簿(18)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

查找二叉樹的定義,所有節點的左子樹均比該結點小,右子樹均比該節點大。如下所示為一個正解的查找二叉樹:
               6
          5          7
     1                    9
                      8          10

根據定義,查找二叉樹的節點應包含一個存儲數據,兩個指針,分別指向節點的左、右子樹,如下所示。

struct BNode
{
        BNode(T dat, BNode
* l, BNode* r) : data(dat), left(l), right(r){};
        T data;
        BNode 
*left, *right;
}
對于二叉查找樹,其優點在于快速查找節點,在樹中找到一個結點,只需讓需查找的結點N與樹中節點進行比較,若N比當前結點小,則只需查找節點的左子樹,反之,則只需查找節點的右子樹,直至找到為止,所以其查找總是為一條單一的路徑。
二叉查找樹的實現
BTree.h
#ifndef BTREE_H
#define BTREE_H
#include 
<iostream>
#include 
<queue>

static int findcounts; //用于測試查找某節點的次數
template<class T>
class BTree
{
    
//定義樹節點,包括一個數據,兩個指針
    struct BNode
    
{
        BNode(T dat, BNode
* l, BNode* r) : data(dat), left(l), right(r){};
        T data;
        BNode 
*left, *right;
    }
* root;

    
//插入一個節點,
    void Insert(const T& data, BNode*& p)
    
{
        
if(p == 0)
        
{
            p 
= new BNode(data, 00);
            std::cout 
<< "Insert data=" << data << std::endl;
        }

        
else if(data < p->data)
        
{
            
//插入數據小于父節點數據,插入左子樹
            Insert(data, p->left);
        }

        
else if(data > p->data)
        
{
            
//插入數據小于父節點數據,插入右子樹
            Insert(data, p->right);
        }

    }


    
//先序遍歷
    void PreOrder (BNode* p)
    
{
        
if(p != 0)
        
{
            Print(p);
            PreOrder (p
->left);
            PreOrder (p
->right);
        }

    }


    
//中序遍歷
    void InOrder (BNode* p)
    
{
        
if(p != 0)
        
{
            InOrder (p
->left);
            Print(p);
            InOrder (p
->right);
        }

    }


    
//后序遍歷
    void PostOrder (BNode* p)
    
{
        
if(p != 0)
        
{
            PostOrder (p
->left);
            PostOrder (p
->right);
            Print(p);
        }

    }
    

    
//查找節點
    bool Find(const T& data, BNode* p)
    
{
        
if(p != 0)
        
{
            
if(data == p->data)
            
{
                
return true;
            }

            
else if(data < p->data)
            
{
                findcounts 
++;
                Find(data, p
->left);
            }

            
else
            
{
                findcounts 
++;
                Find(data, p
->right);
            }

        }

        
else
        
{
            
return false;
        }

    }


    
//刪除整棵樹
    void MakeEmpty(BNode* p)
    
{
        
if(p != 0)
        
{
            MakeEmpty(p
->left);
            MakeEmpty(p
->right);
            std::cout 
<< "del " << p->data << ",";
            delete p;
        }

    }

public:
    BTree() : root(
0){}

    
~BTree()
    
{
        MakeEmpty(root);
    }


    
void Insert(const T& data)
    
{
        Insert(data, root);
    }


    
void PreOrder()
    
{
        
//遞歸,前序遍歷
        PreOrder(root);
    }


    
void InOrder()
    
{
        
//遞歸,中序遍歷
        InOrder(root);
    }


    
void PostOrder()
    
{
        
//遞歸,后序遍歷
        PostOrder(root);
    }


    
//層次遍歷,使用隊列的特性實現樹的非遞歸遍歷
    void LevelOrder ()
    
{
        queue
<BNode*> q;
        BNode
* p = root;
        
while(p)
        
{
            Print(p);
            
if(p->left != 0)
            
{
                q.push(p
->left);
            }

            
if(p->right != 0)
            
{
                q.push(p
->right);
            }

            
if (q.empty())
            
{
                
break;
            }

            p 
= q.front();
            q.pop();
        }

    }


    
//打印一個節點值
    void Print(BNode* p)
    
{
        
if(p != 0)
        
{
            std::cout 
<< p->data << ",";
        }

    }


    
//打印一個節點的查找次數
    void PrintStatic()
    
{
        std::cout 
<< findcounts;
    }


    
//遞歸查找一個節點
    bool Find(const T& data)
    
{
        findcounts 
= 0;
        
return Find(data, root);
    }

}
;
#endif
對樹進行測試
Test.cpp
#include <iostream>
#include 
<cstdlib>
#include 
<ctime>
#include 
"BTree.h"

using namespace std;

int main(int argc, char *argv[])
{
    
//隨機生成一棵樹
    BTree<int> tree;
    srand((unsigned)time(NULL));
    
for(int i=0; i<20++i)
    
{
        tree.Insert(rand() 
/ 20);
    }

    cout 
<< "前序:" << endl;
    tree.PreOrder();
    cout 
<< endl;
    cout 
<< "中序" << endl;
    tree.InOrder();
    cout 
<< endl;
    cout 
<< "后序" << endl;
    tree.PostOrder();
    cout 
<< endl;
    cout 
<< "層次" << endl;
    tree.LevelOrder();
    cout 
<< endl;

    
if(tree.Find(14))
    
{
        cout 
<< "14 is in the tree,search for " ;
        tree.PrintStatic();
        cout 
<< endl;
    }

    
else
    
{
        cout 
<< "14 is not in the tree,search for " ;
        tree.PrintStatic();
        cout 
<< endl;
    }


    
return 0;
}

posted on 2008-11-24 20:05 emptysoul 閱讀(1013) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美黑人一区二区三区| 欧美日韩国产一区精品一区 | 久久一本综合频道| 亚洲欧美在线磁力| 亚洲影视在线| 小辣椒精品导航| 久久深夜福利免费观看| 久久婷婷综合激情| 欧美破处大片在线视频| 国产精品久久久久一区| 国产偷久久久精品专区| 雨宫琴音一区二区在线| 亚洲国产天堂久久国产91| 一个色综合导航| 欧美在线免费一级片| 麻豆久久精品| 一本到12不卡视频在线dvd| 亚洲欧美日韩直播| 免费看黄裸体一级大秀欧美| 欧美日韩一区二区三区在线看| 国产精品综合久久久| 亚洲一区中文| 香蕉成人伊视频在线观看| 久久视频一区二区| 亚洲精品一区二区三区樱花| 亚洲一区精彩视频| 免费成人你懂的| 国产精品丝袜久久久久久app| 尤物在线精品| 欧美一区午夜精品| 亚洲精品久久久久久久久| 亚洲精品影视| 久久久午夜视频| 国产精品网站一区| 亚洲最新视频在线播放| 久久全国免费视频| 中文亚洲视频在线| 欧美黑人一区二区三区| 国产欧美精品一区aⅴ影院| 亚洲人成在线播放| 欧美资源在线观看| 亚洲免费精品| 美日韩精品免费观看视频| 亚洲最新色图| 欧美精品 日韩| 亚洲高清在线观看| 亚洲免费在线精品一区| 亚洲日本欧美| 欧美一区二区视频在线| 亚洲裸体俱乐部裸体舞表演av| 亚洲欧美春色| 久久九九国产精品| 韩日欧美一区| 欧美亚洲一区二区在线| 亚洲自拍啪啪| 欧美精品免费看| 一本色道综合亚洲| 亚洲福利视频三区| 欧美黄色精品| 亚洲高清不卡| 亚洲经典一区| 欧美成人一区二区| 日韩视频免费观看| 欧美福利一区二区| 你懂的国产精品永久在线| 国产在线视频不卡二| 久久视频一区| 欧美在线日韩精品| 激情成人av| 久久九九国产| 久久美女性网| 一区二区三区在线免费观看| 久久一区视频| 久久久久久久999精品视频| 欧美精品一区二区精品网| 夜夜爽99久久国产综合精品女不卡| 久久久999| 久久精品视频网| 黄色日韩在线| 亚洲国产精品va在看黑人| 欧美成在线观看| 午夜精品久久一牛影视| 正在播放亚洲一区| 久久综合电影| 中文日韩在线| 欧美成人亚洲成人| 欧美日韩精品免费观看| 宅男噜噜噜66一区二区66| 亚洲欧美日韩一区二区| 国产女人精品视频| 欧美激情一区二区三区四区| 麻豆免费精品视频| 一区二区日韩欧美| 一本色道久久综合一区| 国产曰批免费观看久久久| 久久综合一区二区三区| 欧美精品粉嫩高潮一区二区 | 99国产精品国产精品久久| 91久久久亚洲精品| 国产精品日韩在线| 久久精品免费播放| 亚洲欧洲日本国产| 国产日韩高清一区二区三区在线| 欧美风情在线| 久久九九精品99国产精品| 久久天天躁狠狠躁夜夜av| 亚洲无毛电影| 性欧美长视频| 亚洲欧美成人网| 久久电影一区| 性欧美长视频| 久热精品视频在线| 欧美诱惑福利视频| 麻豆精品国产91久久久久久| 欧美亚洲免费在线| 久久综合狠狠综合久久综青草| 亚洲免费在线电影| 乱人伦精品视频在线观看| 久久狠狠久久综合桃花| 欧美国产欧美综合| 欧美肥婆在线| 国产三级精品在线不卡| 一区二区欧美视频| 亚洲国产天堂久久综合网| 亚洲欧美日韩区| 亚洲乱码日产精品bd| 亚洲人被黑人高潮完整版| 狠狠入ady亚洲精品经典电影| 日韩特黄影片| 亚洲精品你懂的| 久久成人精品无人区| 狠狠色综合播放一区二区| 一区二区91| 一区二区精品| 嫩模写真一区二区三区三州| 久久精品99国产精品| 国产午夜精品久久久久久免费视| 久久这里只有精品视频首页| 国产精品视频xxx| 久久午夜视频| 精品盗摄一区二区三区| 欧美激情中文字幕一区二区| 亚洲国产小视频在线观看| 久久永久免费| 久久国产欧美| 欧美肥婆在线| 亚洲视频播放| 欧美日韩亚洲综合在线| 欧美一区二区三区喷汁尤物| 国产欧美一区二区色老头| 免费黄网站欧美| 亚洲国产一区二区三区高清| 亚洲一区二区av电影| 久久国产欧美日韩精品| 欧美日韩午夜在线| 午夜精品视频在线观看| 99精品视频一区二区三区| 欧美日韩国产精品| 欧美福利一区| 亚洲尤物视频网| 国产欧美日韩综合一区在线播放| 亚洲午夜精品福利| 久久久久一区二区三区四区| 狠狠色噜噜狠狠狠狠色吗综合| 久久亚洲捆绑美女| 亚洲国产欧美日韩精品| 亚洲欧洲av一区二区三区久久| 国产精品美女主播在线观看纯欲| 欧美亚洲一区三区| 蜜臀a∨国产成人精品| 日韩视频在线一区二区| 欧美日韩国产黄| 久久久成人精品| 亚洲高清一区二| 欧美在线亚洲在线| 激情久久五月| 国产精品二区三区四区| 亚洲尤物在线| 欧美激情中文字幕在线| 亚洲免费精品| 很黄很黄激情成人| 久久精品欧美日韩| 夜夜嗨av一区二区三区网页 | 国内成人精品一区| 另类酷文…触手系列精品集v1小说| 日韩写真视频在线观看| 午夜精品久久久久久久男人的天堂 | 久久国产天堂福利天堂| 日韩亚洲一区二区| 国产精品久久网站| 欧美—级在线免费片| 亚洲电影专区| 麻豆久久久9性大片| 国产精品午夜在线观看| 久久综合久色欧美综合狠狠 | 国产精品日韩久久久久| 免费不卡在线视频| 亚洲伊人网站| 亚洲性图久久| 欧美成人午夜免费视在线看片|