二叉樹基本操作

二叉樹基本操作

頭文件


#ifndef BinaryTree_hpp

#define BinaryTree_hpp

#include <stdio.h>

typedef char TelemType;

typedef struct BitNode{

TelemType data;

struct BitNode *lchild,*rchild;

}BitNode;

typedef BitNode *BiTree;

class BinaryTree {

public:

void PreOrderTraverse(BiTree T);

void PreOrderTraverseRec(BiTree T);

void InOrderTraverse(BiTree T);

void InOrderTraverseST(BiTree T);

void PostOrderTraverse(BiTree T);

void PostOrderTraverseRec(BiTree T);

void PostOrderTraverseRec2(BiTree T);

void CreateBitTree(BiTree &T);

void DestoryBitTree(BiTree &T);

};

#endif /* BinaryTree_hpp */

實(shí)現(xiàn)文件


#include "BinaryTree.hpp"
#include <iostream>
#include <stack>
using namespace std;
void BinaryTree::PreOrderTraverseRec(BiTree T)
{
    BitNode *p,*q;
    stack<BitNode *>S;
    p = T;
    while(p||!S.empty()) {
        if (p) {
            S.push(p);
            cout<<p->data;
            p=p->lchild;
        }
        else {
            q = S.top();
            S.pop();
            p=q->rchild;
        }
    }
}
void BinaryTree::InOrderTraverse(BiTree T)
{
    if (T) {
        InOrderTraverse(T->lchild);
        cout<<T->data;
        InOrderTraverse(T->rchild);
    }
}
void BinaryTree::InOrderTraverseST(BiTree T)
{
    BitNode *p,*q;
    stack<BitNode *> S;
    p = T;
    while (p||!S.empty()) {
        if (p) {
            S.push(p);
            p= p->lchild;
        }
        else {
            q=S.top();
            S.pop();
            cout<<q->data;
            p=q->rchild;
        }
    }
}
void BinaryTree::PostOrderTraverseRec(BiTree T)
{
    BitNode *p,*q = nullptr;
    p=T;
    stack<BitNode *> S;
    while (p||!S.empty()) {
//將左節(jié)點(diǎn)一直到最末,入棧
        while (p) {
            S.push(p);
            p=p->lchild;
        }
        p=S.top();
        
        if (!p->rchild||p->rchild==q) {
            cout<<p->data;
            q=p;
            p=NULL;
            S.pop();
        }
        else {
            p=p->rchild;
        }
    }
}
void BinaryTree::PostOrderTraverseRec2(BiTree T)
{
    BitNode *cur,*pre = NULL;
    cur=T;
    stack<BitNode *> S;
    S.push(cur);
    while (!S.empty()) {
        cur=S.top();
//要保證根結(jié)點(diǎn)在左孩子和右孩子訪問之后才能訪問泽论,因此對(duì)于任一結(jié)點(diǎn)P翼悴,先將其入棧幔妨。如果P不存在左孩子和右孩子,則可以直接訪問它误堡;或者P存在左孩子或者右孩子,但是其左孩子和右孩子都已被訪問過了煞额,則同樣可以直接訪問該結(jié)點(diǎn)。若非上述兩種情況胀莹,則將P的右孩子和左孩子依次入棧,這樣就保證了每次取棧頂元素的時(shí)候描焰,左孩子在右孩子前面被訪問栅螟,左孩子和右孩子都在根結(jié)點(diǎn)前面被訪問
        if ((!cur->lchild&&!cur->rchild)||(pre&&(pre==cur->lchild||pre==cur->rchild))) {
            cout<<cur->data;
            S.pop();
            pre=cur;
        }
        else {
            if (cur->rchild) {
                S.push(cur->rchild);
            }
            if (cur->lchild) {
                S.push(cur->lchild);
            }
        }
    }
}
void BinaryTree::CreateBitTree(BiTree &T)
{
    char ch;
    cin>>ch;
    if (ch == '#') {
        T=NULL;
    }
    else {
        T= new BitNode;
        T->data = ch;
        CreateBitTree(T->lchild);
        CreateBitTree(T->rchild);
    }
}
void BinaryTree::DestoryBitTree(BiTree &T)
{
    if (T) {
        DestoryBitTree(T->lchild);
        DestoryBitTree(T->rchild);
        delete T;
        T=NULL;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市掺逼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赘那,老刑警劉巖氯质,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闻察,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辕漂,警方通過查閱死者的電腦和手機(jī)钮热,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門隧期,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人仆潮,你說(shuō)我怎么就攤上這事∈安ⅲ” “怎么了鹏浅?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵之碗,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我褪那,道長(zhǎng),這世上最難降的妖魔是什么博敬? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任偏窝,我火速辦了婚禮,結(jié)果婚禮上囚枪,老公的妹妹穿的比我還像新娘。我一直安慰自己默赂,他們只是感情好缆八,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布奈辰。 她就那樣靜靜地躺著乱豆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宛裕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天蛹屿,我揣著相機(jī)與錄音岩榆,去河邊找鬼勇边。 笑死,一個(gè)胖子當(dāng)著我的面吹牛识颊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谊囚,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼执赡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了奠伪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绊率,失蹤者是張志新(化名)和其女友劉穎滤否,沒想到半個(gè)月后最仑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欲芹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年菱父,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剑逃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖称开,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情清酥,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站昆雀,受9級(jí)特大地震影響蝠筑,放射性物質(zhì)發(fā)生泄漏什乙。R本人自食惡果不足惜已球,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忆某。 院中可真熱鬧弃舒,春花似錦、人聲如沸棒坏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喂窟。三九已至磨澡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稳摄,已是汗流浹背饲宿。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工仗阅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人减噪。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓筹裕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親朝卒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扎运,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 樹的概述 樹是一種非常常用的數(shù)據(jù)結(jié)構(gòu)豪治,樹與前面介紹的線性表,棧扯罐,隊(duì)列等線性結(jié)構(gòu)不同负拟,樹是一種非線性結(jié)構(gòu) 1.樹的定...
    Jack921閱讀 4,462評(píng)論 1 31
  • 四掩浙、樹與二叉樹 1. 二叉樹的順序存儲(chǔ)結(jié)構(gòu) 二叉樹的順序存儲(chǔ)就是用數(shù)組存儲(chǔ)二叉樹。二叉樹的每個(gè)結(jié)點(diǎn)在順序存儲(chǔ)中都有...
    MinoyJet閱讀 1,548評(píng)論 0 7
  • 二叉搜索樹,平衡樹侵蒙,B造虎,b-,b+,b*,紅黑樹 二叉搜索樹 ? 1.所有非葉子結(jié)點(diǎn)至多擁有兩個(gè)兒子(Le...
    raincoffee閱讀 3,880評(píng)論 3 18
  • 一直以來(lái)纷闺,我都很少使用也避免使用到樹和圖,總覺得它們神秘而又復(fù)雜,但是樹在一些運(yùn)算和查找中也不可避免的要使用到澎媒,那...
    24K男閱讀 6,754評(píng)論 5 14
  • 快捷鍵整理系列文章地址:AndroidStudio快捷鍵整理--1 AndroidStudio快捷鍵整理--2A...
    CnPeng閱讀 1,131評(píng)論 0 1